在特定的数据列中向上移动行

时间:2017-05-17 01:35:48

标签: r dataframe

我有一个关于在数据的特定列中移动行的问题。

data <- data.frame(B=c(NA,NA,0,NA,NA,0),C=c(1,NA,NA,1,NA,NA))
   B  C
1 NA  1
2 NA NA
3  0 NA
4 NA  1
5 NA NA
6  0 NA    

我试过这篇文章Shifting a column down by one

na.omit(transform(data, B = c(NA, B[-nrow(data)])))

但只能获得

  B C
4 0 1

预期产出;

  B  C
1 0  1
2 0  1

我们如何实现这一目标?

感谢。

1 个答案:

答案 0 :(得分:2)

如果要从每列中删除所有NA,并且不关心列之间的行不匹配,则可以执行以下操作:

data <- data.frame(B=c(NA,NA,0,NA,NA,0),C=c(1,NA,NA,1,NA,NA))

res<-lapply(data,function(x){x[complete.cases(x)]})
res<-data.frame(res)

第二行说明:对于data中的每一列,只保留不是NA的值

感谢@thelatemail从下面的解决方案中进行了更正,但有效,但会将列保留为因素:

数据&lt; - data.frame(B = c(NA,NA,0,NA,NA,0),C = c(1,NA,NA,1,NA,NA))

RES&LT; -apply(数据,如图2所示,函数(X){X [complete.cases(X)]})