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

基于特定列中是否包含字符来删除R中的行,r,if-statement,conditional,R,If Statement,Conditional,在R中使用此示例数据帧: 1123 2 3 4 2789 1 3 5 C2124 1 44 6 CS112 3 32 1 这个数据框是巨大的,但我相信这是解决这个问题真正需要的全部信息。如何删除数据帧中第一列(称为x,数据帧df)以C或CS开头的所有行?我认为我的数据帧是列表格式的,实际上没有矢量化,因为gsub不起作用。这可以通过grep来完成,以匹配只有数字的元素,包括从开始(^)到结束($)以及基于此逻辑矢量的行子集 df[grepl("^[0-9.]+$", df[,1]), ]

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

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

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

这可以通过
grep
来完成,以匹配只有数字的元素,包括从开始(
^
)到结束(
$
)以及基于此逻辑
矢量的行子集

 df[grepl("^[0-9.]+$", df[,1]), ]
或者简单地转换为
numeric
,非数值元素将是NA(带有友好的警告,并通过使用
is.NA转换为逻辑向量来删除这些行)

df[!is.na(as.numeric(df[,1])),]
对于以“C”或“CS”开头的字符串的特定情况,请使用正则表达式(
“^CS*
)进行匹配,这意味着字符串以“C”开头,后跟0或更多的“S”,并对逻辑
向量进行求反(
)以将行子集化

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

使用
dplyr
stringr

df %>% filter(!str_detect(x, "^C"))
或者使用
grepl

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

抱歉,我在所有其他问题上都需要它,而习惯让我把它放进去。