排除多列中缺少值的行

时间:2017-04-18 11:46:50

标签: r for-loop na

我有一个由> 200列和> 3000行组成的数据集。其中一些是特定列中的NA,我想用for循环排除这些个体。

如果所有18列中的行都是NA,我想从整个数据帧中排除这些行。 18个变量的名称是:" q_81_SQ00a"," q_81_SQ00b"," q_81_SQ00c" (...)" q_81_SQ00r"。正如您所看到的,所有变量都具有相同的名称,但最后一个字母不同(q除外)。

我试过这个没有成功:

lapply(letters[c(1:16,18)], function(x){

  df <- na.omit(data.family[[paste0("q_81_SQ00", x)]])
})

使用此代码,我只获得所有rownumbers的列表。应该说我在用Fisher测试计算显着性时使用了for循环,例如:

lapply(letters[c(1:16,18)], function(x){

  fisher.test(data.family$related,
                          data.family[[paste0("q_81_SQ00", x)]])
  })

1 个答案:

答案 0 :(得分:1)

apply函数用于在矩阵或矩阵(如数据结构)的列或行(取决于Margin = 1(行),Margin = 2(列)的值)上应用函数。

na_count是每行data.family中na的计数 然后通过检查na_count == 18,将data.family子集排除在所有列为NA的行之外。

na_count<-apply(X = data.family,MARGIN = 1,function(t){length(which(is.na(t)))})
data.family<-data.family[-which(na_count==18),]