【问题标题】:removing columns with NA values only [duplicate]仅删除具有 NA 值的列[重复]
【发布时间】:2014-11-13 08:49:31
【问题描述】:

我正在使用此命令删除所有值为 NA 的列。

testing5 <- subset(testing4,
                   select = -c(kurtosis_picth_belt, skewness_roll_belt, 
                   skewness_roll_belt.1, min_yaw_belt, amplitude_yaw_belt, 
                   kurtosis_roll_arm, kurtosis_picth_arm, kurtosis_yaw_arm, 
                   skewness_roll_arm, skewness_pitch_arm, kurtosis_picth_dumbbell, 
                   skewness_roll_dumbbell, skewness_pitch_dumbbell, min_yaw_dumbbell, 
                   kurtosis_roll_forearm, kurtosis_picth_forearm, skewness_roll_forearm, 
                   skewness_pitch_forearm))

有更短的(程序化)方法吗?

感谢和问候, 帕萨

【问题讨论】:

标签: r


【解决方案1】:

tidyverse 方法看起来像这样(也使用@Rich Scriven 数据):

d %>% select_if(~any(!is.na(.)))
#    x
# 1 NA
# 2  3
# 3 NA

【讨论】:

    【解决方案2】:

    您可以删除包含所有 NA 值的列,例如

    d <- data.frame(x = c(NA, 3, NA), y = rep(NA, 3))
    #    x  y
    # 1 NA NA
    # 2  3 NA
    # 3 NA NA
    
    d[!sapply(d, function(x) all(is.na(x)))]
    #    x
    # 1 NA
    # 2  3
    # 3 NA
    

    根据您的数据,这将是

    testing4[!sapply(testing4, function(x) all(is.na(x)))]
    

    【讨论】:

    • (+1) 获得更安全的解决方案 :)
    【解决方案3】:

    使用@Richards 数据的另一种方式(更矢量化)

    d[!is.nan(colMeans(d, na.rm = TRUE))]
    #    x
    # 1 NA
    # 2  3
    # 3 NA
    

    【讨论】:

    • 在那条路上,也许像d[colSums(is.na(d)) &lt; nrow(d)] 这样的东西会更清楚?
    • @alexis_laz,一如既往的好建议
    猜你喜欢
    • 2016-08-23
    • 2018-10-21
    • 2021-05-28
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 2011-09-02
    相关资源
    最近更新 更多