我有一个数据框,想知道某个字符串是否存在。 我想知道df [,1]中的任何值是否包含inscompany中的任何值。
df = data.frame(company=c("KMart", "Shelter"), var2=c(5,7))
if( df[,1] == inscompany ) print("YES")
inscompany <- c("21st Century Auto Insurance", "AAA Auto Insurance", "AARP Auto Insurance",
"Allstate Auto Insurance", "American Family Auto Insurance", "Eastwood Auto Insurance",
"Erie Auto Insurance", "Farmers Auto Insurance", "GMAC Auto Insurance", "Hartford Auto Insurance",
"Infinity Auto Insurance", "Mercury Auto Insurance", "Nationwide Auto Insurance", "Progressive Auto Insurance",
"Shelter Insurance Company", "Titan Auto Insurance", "Travelers Auto Insurance", "USAA Auto Insurance")
我收到一条错误消息,它只能检查inscompany到df [,1]的第一个值。
帮助!
答案 0 :(得分:6)
你想要%in%
。这是一个例子:
R> chk <- c("A", "B", "Z") # some text
R> chk %in% LETTERS[1:13] # check for presence in first half of alphabet
[1] TRUE TRUE FALSE
R>
match()
功能相关,请参阅帮助页面了解详情。
答案 1 :(得分:1)
我认为match
和%in%
不适用于部分匹配。 grepl
根据目标字符串是否包含而给出逻辑(TRUE / FALSE)结果;我使用^
仅在字符串的开头强制执行匹配(您可能不需要)。需要any
和sapply
才能扩展到多对多匹配。如果您只是想知道任何字符串是否匹配,那么整个事情需要再增加一个any
。
sapply(df$company,function(x) any(grepl(paste("^",x,sep=""),inscompany)))
[1] FALSE TRUE