Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
502 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 Reply

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])])

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...