基于特定列中是否包含字符来删除R中的行
在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]), ]
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))
抱歉,我在所有其他问题上都需要它,而习惯让我把它放进去。