在具有数字和字符项的R列中查找完全相同的字符串的匹配项

时间:2019-07-15 07:06:43

标签: r string dataframe

我有一列包含数字和字符串。我只想查找那些具有特定字符串的行,而不是其他行。在这种情况下,我只需要具有SE的行,而不需要其他行。

df :  
names
SE123, FE43, SA67
SE167, SE24, SE56, SE34
SE23
FE36, KE90, LS87
DG20, SE34, LP47
SE57, SE39 

结果df

names
SE167, SE24, SE56, SE34
SE23
SE57, SE39 

我的代码

df[grep("^SE", as.character(df$names)),]

但这将选择具有SE的每一行。有人可以帮助实现df结果吗?谢谢。

2 个答案:

答案 0 :(得分:2)

查看预期的输出,您似乎想要选择其中每个元素以"SE"开头的行,其中每个元素是两个逗号之间的单词。

使用基数R,一种方法是在","上拆分字符串并选择其中每个元素startsWith "SE"

的行
df[sapply(strsplit(df$names, ","), function(x) 
          all(startsWith(trimws(x), "SE"))), , drop = FALSE]

#                    names
#2 SE167, SE24, SE56, SE34
#3                    SE23
#6              SE57, SE39

如果您想找到"SE"的位置,而不考虑位置,也许grepl是一个更好的选择。

df[sapply(strsplit(df$names, ","), function(x) 
             all(grepl("SE", trimws(x)))), , drop = FALSE]

在进行names或运行之前,请确保已将strsplit作为字符列

df$names <- as.character(df$names)

答案 1 :(得分:1)

names[!grepl("[A-Z]",gsub("SE","",names))]
[1] "SE167, SE24, SE56, SE34" "SE23"                    "SE57, SE39" 

您可以从所有字符串中删除SE,然后查找任何字符。仅具有SE的字符串将不包含任何其他字符,因此由过滤器保留。
(如果您有25SE,这也适用)