我有一个关键字(例如'绿色')和一些文字("我不喜欢他们Sam我是!").
我想看看关键字中有多少个字符('g','r','e','e','n')出现在文本中(按任意顺序).
在这个例子中答案是3 - 文本没有G或R但有两个Es和N.
我的问题出现在如果文本中的字符与关键字中的字符匹配,那么它不能用于匹配关键字中的不同字符.
例如,如果我的关键字是'greeen',则"匹配字符"的数量仍为3(一个N和两个Es),因为文本中只有两个Es,而不是3(以匹配关键字中的第三个E) .
我怎么能用R写这个?这只是在我的记忆的边缘滴答作响 - 我觉得这是一个常见的问题但只是措辞不同(有点像没有替换的采样,但"匹配没有替换"?).
例如
keyword <- strsplit('greeen', '')[[1]]
text <- strsplit('idonotlikethemsamiam', '')[[1]]
# how many characters in keyword have matches in text,
# with no replacement?
# Attempt 1: sum(keyword %in% text)
# PROBLEM: returns 4 (all three Es match, but only two in text)
Run Code Online (Sandbox Code Playgroud)
预期输入/输出的更多示例(关键字,文本,预期输出):
N8T*_*TRO 14
函数pmatch()非常适用于此.虽然在这里使用长度是本能的,但是长度没有na.rm选项.因此,要解决这个麻烦,使用sum(!is.na()).
keyword <- unlist(strsplit('greeen', ''))
text <- unlist(strsplit('idonotlikethemsamiam', ''))
sum(!is.na(pmatch(keyword, text)))
# [1] 3
keyword2 <- unlist(strsplit("red", ''))
sum(!is.na(pmatch(keyword2, text)))
# [1] 2
Run Code Online (Sandbox Code Playgroud)