如何删除只包含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