可复制示例
表1
df <- data.frame(Name = c('hisas', 'myjafs', 'namegaefi'))
Name
1 hisas
2 myjafs
3 namegaefi
表2
ref <- data.frame(Name = c('john', 'hello', 'his', 'name', 'random'))
Name
1 john
2 hello
3 his
4 name
5 random
预期产量
Name Test
1 hisas T
2 myjafs F
3 namegaefi T
问题
我正在尝试使用grepl查看表1中是否可以找到表2中的字符串,并有条件地更新新列i。测试以反映 T 或 F
代码失败
grepl(df$Name,ref$Name, fixed=TRUE)
答案 0 :(得分:3)
只是为了娱乐而使用adist
的解决方案。当然,这不会很好地扩展。
d <- adist(df$Name, ref$Name, costs = list(insertions = 1, deletions = 0, substitutions = 1))
# [,1] [,2] [,3] [,4] [,5]
#[1,] 3 4 0 3 5
#[2,] 3 5 2 3 5
#[3,] 3 4 2 0 4
rowSums(!d) > 0
#[1] TRUE FALSE TRUE
答案 1 :(得分:2)
您可以paste
ref$Name
一起作为一种模式,然后使用grepl
df$Test <- grepl(paste0(ref$Name, collapse = "|"), df$Name)
df
# Name Test
#1 hisas TRUE
#2 myjafs FALSE
#3 namegaefi TRUE
答案 2 :(得分:2)
您可以这样做:
df <- data.frame(Name = c('hisas', 'myjafs', 'namegaefi'))
ref <- data.frame(Name = c('john', 'hello', 'his', 'name', 'random'))
sapply(df$Name, function(s) any(sapply(ref$Name, grepl, x=s, fixed=TRUE)))