我正在尝试检查列表中的任何数据框是否包含所有条目NA的列。
我试过这个lapply(df,function(x)all(is.na(df)))
并且可以正常检查所有列。如何在下面的列表中检查第一列是否为NA。
我尝试了lapply(df[,1],function(x)all(is.na(df[,1])))
,但这不是正确的做法
[[1]]
ID Mas5.SignalIntensity DetectionCalls P.value
1 1007_s_at 3242.90209 P 0.000218932
2 1053_at 377.81481 P 0.017000453
3 117_at 114.88743 A 0.066864977
4 121_at 8739.03257 P 0.000218932
[[2]]
ID Mas5.SignalIntensity DetectionCalls P.value
1 NA 134.40764 P 0.000561751
2 NA 453.34875 P 0.002227740
3 NA 706.34996 A 0.066864977
4 NA 102.51459 A 0.089405078
[[3]]
ID Mas5.SignalIntensity DetectionCalls P.value
1 1007_s_at 7015.297075 P 0.000218932
2 1053_at 677.459859 P 0.011447358
3 117_at 180.568654 A 0.267462560
4 121_at 1693.426847 P 0.006531992
5 1255_g_at 181.221325 A 0.339557900
答案 0 :(得分:4)
尝试
sapply(lst, function(x) any(colSums(!is.na(x))==0))
#[1] TRUE FALSE TRUE
如果要检查特定列,例如第2栏
sapply(lst, function(x) all(is.na(x[,2])))
#[1] FALSE FALSE TRUE
或者
sapply(lst, function(x) sum(!is.na(x[,2]))==0)
#[1] FALSE FALSE TRUE
df <- data.frame(col1= NA, col2=1:5, col3=c(1:3,NA, NA))
df1 <- data.frame(col1=1:5, col2=6:10, col3=11:15)
df2 <- data.frame(col1=c(NA,2), col2= NA, col3=c(2,4))
lst <- list(df, df1, df2)