我想找到一个优雅的方法:
我有两个数据框:
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中提取多个子字符串,并且不知道如何存储子字符串,无论是在列表还是其他数据框中。
关于如何解决问题的任何想法和建议都将非常感激,因为我想花时间充分理解解决这个问题背后的机制。
提前谢谢!
已编辑:用于格式化
答案 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