如何删除只包含NAs的列?

我有一个data.frame包含一些所有NA值的列,我如何从data.frame中删除它们。

我可以使用该功能吗?

na.omit(...) 

指定一些额外的参数?


一种做法:

df[, colSums(is.na(df)) != nrow(df)]

如果列中的NAs数量等于行数,则它必须完全是NA。

或类似地

df[colSums(!is.na(df)) > 0]

它seeems像你想删除与都只NA S,留下列了一些行那些具有NA秒。 我会这样做(但我相信有一个有效的矢量化的soution:

#set seed for reproducibility
set.seed <- 103
df <- data.frame( id = 1:10 , nas = rep( NA , 10 ) , vals = sample( c( 1:3 , NA ) , 10 , repl = TRUE ) )
df
#      id nas vals
#   1   1  NA   NA
#   2   2  NA    2
#   3   3  NA    1
#   4   4  NA    2
#   5   5  NA    2
#   6   6  NA    3
#   7   7  NA    2
#   8   8  NA    3
#   9   9  NA    3
#   10 10  NA    2

#Use this command to remove columns that are entirely NA values, it will elave columns where only some vlaues are NA
df[ , ! apply( df , 2 , function(x) all(is.na(x)) ) ]
#      id vals
#   1   1   NA
#   2   2    2
#   3   3    1
#   4   4    2
#   5   5    2
#   6   6    3
#   7   7    2
#   8   8    3
#   9   9    3
#   10 10    2

如果您发现自己处于想要删除具有任何NA值的列的情况,只需将上面的all命令更改为any


这是一个dplyr解决方案:

df %>% select_if(~sum(!is.na(.)) > 0)
链接地址: http://www.djcxy.com/p/24893.html

上一篇: How to delete columns that contain ONLY NAs?

下一篇: Learning R. Where does one Start?