Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
499 views
in Technique[技术] by (71.8m points)

r - Shifting a column down by one

Say I have a data.frame that looks like this

 df <- data.frame(AAA = rep(c(NA,sample(1:10, 1)),5),
  BBB = rep(c(NA,sample(1:10, 1)),5),
  CCC = rep(c(sample(1:10, 1),NA),5))

> df 
   AAA BBB CCC
1   NA  NA  10
2    3   7  NA
3   NA  NA  10
4    3   7  NA
5   NA  NA  10
6    3   7  NA
7   NA  NA  10
8    3   7  NA
9   NA  NA  10
10   3   7  NA

I want to shift column CCC down by one so that all the numbers align in a single row, and then delete the rows that contain no data (often every other row - BUT NOT ALWAYS - the pattern might vary through the data.frame.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Using dplyr

library(dplyr)
df %>%
mutate(CCC=lag(CCC)) %>%
na.omit()

Or using data.table

library(data.table)
na.omit(setDT(df)[, CCC:=c(NA, CCC[-.N])])

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...