【问题标题】:R Drop rows where all columns beginning with a string have NAsR删除所有以字符串开头的列都有NA的行
【发布时间】:2020-01-07 14:54:26
【问题描述】:

我有以下数据框:

df <- data.frame(
  "DateValue" = c("2016-07-01", "2016-07-02", "2016-07-03", "2016-07-04", "2016-07-05", "2016-07-06","2016-07-07"),  
  "Age1" = c(rep(NA, 2), seq(14,18,2), NA, NA), 
  "Age2" = c(rep(NA, 2), seq(14,22,2)) 
)

我正在尝试删除以字符串“Age”开头的所有列中包含 NA 的所有行。但是,不要删除即使“年龄”列之一具有非缺失值的行。我的目标输出如下:

> df
    DateValue  Age1 Age2
  1 2016-07-03   14   14
  2 2016-07-04   16   16
  3 2016-07-05   18   18
  4 2016-07-06   NA   20
  5 2016-07-07   NA   22

我正在尝试使用以下 R 脚本来实现相同的效果,但 NA 不会下降:

df <- df[!(is.na(grep("^Age", names(df)))), ]

任何指导将不胜感激。

【问题讨论】:

    标签: r dataframe na


    【解决方案1】:

    我们可以使用rowSums 创建一个逻辑向量并以此为基础对行进行子集化

    df[rowSums(!is.na(df[grep("^Age", names(df))])) > 0, ]
    

    【讨论】:

    • 这甚至会删除最后两行具有“年龄”列之一的值。
    猜你喜欢
    • 1970-01-01
    • 2010-09-08
    • 2015-01-18
    • 1970-01-01
    • 2015-10-23
    • 2022-01-16
    • 2010-09-05
    • 1970-01-01
    • 2015-10-28
    相关资源
    最近更新 更多