我有一个由> 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)]])
})
答案 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),]