如何根据R中有效值(NA除外)的数量选择数据框中的某些列?

时间:2018-06-04 02:22:52

标签: r validation dataframe

我正在使用R,我有一个包含多列的数据框。我想运行一个代码并自动检查每列中的值的数量(有效值,而不是NA)。然后,它应该选择50%的行用有效值填充的列,并将它们保存在新的数据帧中。

有人可以帮我这样做吗?非常感谢你。

是否有任何方法可以将代码应用于不确定数量的列?

2 个答案:

答案 0 :(得分:1)

使用purrr包,您可以在下面编写函数来检查缺失值的百分比:

pct_missing <- purrr::map_dbl(df,~mean(is.na(.x)))

之后,您可以选择名称缺失值少于50%的列。

selected_column <- colnames(df)[pct_missing < 0.5]

要创建新数据集,您可以使用:

library(dplyr)
df_new <- df %>% select(one_of(selected_column))

答案 1 :(得分:0)

您可以在R base中创建一个函数,以自动检索与critria匹配的列:

功能:

ColSel <- function(df){
vals <- apply(df,2, function(fo) mean(is.na(fo))) < .5
return(df[,vals])
}

一些玩具数据

## example
df1 <- data.frame(
    a = c(runif(19),NA),
    b = c(rep(NA,11),runif(9)),
    d = rep(NA,20),
    e = runif(20)
    )

测试

df2 <- ColSel(df1)