检查列中的列是否为na

时间:2015-06-26 11:21:26

标签: r na

我正在尝试检查列表中的任何数据框是否包含所有条目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

1 个答案:

答案 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)