【问题标题】:Getting Rid of rows in R based on if a specific column has a character in it [duplicate]根据特定列中是否有字符来删除R中的行[重复]
【发布时间】:2017-03-20 20:57:47
【问题描述】:

在 R 中使用这个示例数据框:

1123 2 3 4
2789 1 3 5
C2124 1 44 6 
CS112 3 32 1

这个数据框很大,但我认为这是解决问题真正需要的所有信息。如何删除我的数据框中的所有行,其中第一列(我们称之为 x 和数据框 df)以 C 或 CS 开头?我认为我的数据框是列表格式,实际上没有向量化,因为 gsub 不起作用。

【问题讨论】:

  • 抱歉,我在所有其他问题中都需要它,并且习惯导致我把它放进去。

标签: r if-statement conditional


【解决方案1】:

这可以使用 grep 来匹配从开始 (^) 到结束 ($) 仅包含数字的元素,包括 .,并根据此逻辑 vector 对行进行子集化

 df[grepl("^[0-9.]+$", df[,1]), ]

或者简单地转换为numeric,非数字元素将为NA(带有友好警告并通过转换为is.na的逻辑向量来删除这些行

df[!is.na(as.numeric(df[,1])),]

对于以 'C' 或 'CS' 开头的字符串的特定情况,使用正则表达式 ("^CS*) 进行匹配,这意味着字符串以 'C' 开头,后跟 0 个或多个 'S' 并取反(@ 987654331@) 逻辑vector 对行进行子集化

df[!grepl("^CS*", df[,1]),]

【讨论】:

    【解决方案2】:

    使用dplyrstringr

    df %>% filter(!str_detect(x, "^C"))
    

    或使用grepl:

    df %>% filter(!grepl("^C", x))
    

    【讨论】:

      猜你喜欢
      • 2021-07-04
      • 2022-01-23
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2020-01-18
      • 2016-07-27
      • 1970-01-01
      相关资源
      最近更新 更多