循环2个数据帧以使用grepl识别列中的通用字符串

时间:2019-07-26 05:59:27

标签: r

可复制示例

表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)

3 个答案:

答案 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)))