提取多个子字符串并为每个子字符串返回一个值

时间:2018-05-10 09:31:46

标签: r

我想找到一个优雅的方法:

  1. 从df1
  2. 中的每一行中提取多个子字符串
  3. 将每行的多个子字符串存储为矢量或列表
  4. 为df1
  5. 中的每个行向量返回一个值

    我有两个数据框:

    n = c("Canada and USA", "USA and Mexico", "Canada and Mexico")
    df1 = data.frame(n)
    
    m = c("Canada", "USA", "Mexico")
    o = c(5, 8, 7)
    df2= data.frame(m, o)
    

    我的结果数据框如下所示:

    n = c("Canada and USA", "USA and Mexico", "Canada and Mexico")
    p = c(13, 15, 12)
    df3 = data.frame(n, p)
    

    其中vector' p'的值是vector' o'的元素之和。对应于向量' n'。

    注意:我只是在寻找一种方法,所以我可能会解决这个问题。

    目前,我仍然坚持使用lapply和regex从df1中提取多个子字符串,并且不知道如何存储子字符串,无论是在列表还是其他数据框中。

    关于如何解决问题的任何想法和建议都将非常感激,因为我想花时间充分理解解决这个问题背后的机制。

    提前谢谢!

    已编辑:用于格式化

1 个答案:

答案 0 :(得分:0)

以下可能会做你想做的事 首先,创建一个索引矩阵,其匹配的索引为df2$m。然后使用索引矩阵对df2$o中的值求和。

inx <- sapply(df2$m, function(s) grep(s, df1$n))
df4 <- data.frame(n, p = apply(inx, 2, function(i) sum(df2$o[i])))

df4
#                  n  p
#1    Canada and USA 12
#2    USA and Mexico 13
#3 Canada and Mexico 15