我有一个关于在数据的特定列中移动行的问题。
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
我们如何实现这一目标?
感谢。
答案 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)]})