【发布时间】:2018-12-07 20:49:28
【问题描述】:
这是一个数据框和一个向量。
df1 <- tibble(var1 = c("abcd", "efgh", "ijkl", "mnopqr", "qrst"))
vec <- c("ab", "mnop", "ijk")
现在,对于 var1 中与 vec 中的值最接近(我想匹配前 n 个字符)的所有值,在 var1 中只保留 upto vec 的前 3 个字符,这样所需的解决方案是:
df2 <- tibble(var1 = c("ab", "efgh", "ijk", "mno", "qrst"))
由于“abcd”在 vec 中与“ab”最接近,我们只保留最多 3 个“ab”字符,在这种情况下,在 df2 中为 2,但“efgh”在 vec 中不存在,所以我们保留它是 df2 中的“efgh”等等。
我可以使用 dplyr、stringr、fuzzyjoin、agrep 或 blurwuzzyr 来完成此任务吗?感谢 Psidom,您可能希望在 https://stackoverflow.com/a/51053674/6762788 的以下建议的基础上进行构建。
df1 %>%
mutate(var1 = ifelse(var1 %in% vec, substr(var1, 1, 3), var1))
【问题讨论】:
-
如果值 'tmnop' 在 var1 中,它会返回 'mno' 还是什么都不返回?如果 'nope' 在 var1 中,它会返回
nop还是什么都不返回? -
我想匹配前 n 个字符。所以 tmnop 和 nope 应该像 efgh 一样返回 tmnop 和 nope。
标签: r string-matching fuzzy-search agrep fuzzyjoin