从每列中删除相同数量的NA并重新调整数据的最快方法

时间:2014-07-13 07:18:25

标签: r data.table

从此post扩展,得出如下结果:

     x  y  z
 1:  1 NA NA
 2:  2 NA 22
 3:  3 13 23
 4:  4 14 24
 5:  5 15 25
 6:  6 16 26
 7:  7 17 27
 8: NA 18 28
 9: NA 19 NA
10: NA NA NA

如您所见,如果删除每列的NAs,我们可以获得data.table,如下所示:

   x  y  z
1: 1 13 22
2: 2 14 23
3: 3 15 24
4: 4 16 25
5: 5 17 26
6: 6 18 27
7: 7 19 28

我想出了这段代码来获得上述结果:

mat.temp <- na.omit(mat[,1, with = F])
for (i in 2:3) {
  temp <- na.omit(mat[,i, with = F])
  mat.temp <- cbind(mat.temp, temp)
}

但是,我不确定它是否有效。 你能给我一些建议吗?

谢谢

1 个答案:

答案 0 :(得分:3)

听起来你只是想做:

DT[, lapply(.SD, function(x) x[!is.na(x)])]
#    x  y  z
# 1: 1 13 22
# 2: 2 14 23
# 3: 3 15 24
# 4: 4 16 25
# 5: 5 17 26
# 6: 6 18 27
# 7: 7 19 28

但是,如果每列中的NA值不同,我不确定这会有多好。