根据特定列中是否包含字符来删除 R 中的行

Getting Rid of rows in R based on if a specific column has a character in it

在 R 中使用此示例数据框:

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

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

这可以通过 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' 并否定 (!) 逻辑 vector 以对行

进行子集化
df[!grepl("^CS*", df[,1]),]

使用 dplyrstringr:

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

或使用grepl:

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