我有一列包含数字和字符串。我只想查找那些具有特定字符串的行,而不是其他行。在这种情况下,我只需要具有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结果吗?谢谢。
答案 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
,这也适用)