【发布时间】:2020-10-29 01:11:32
【问题描述】:
上一个问题已关闭,但简单的解决方案似乎不起作用。所以我在这里进一步解释了我的问题。
我有两个数据框,df1 和 df2。 df1 有很多原始数据,df2 有基于“value_a”的指针,可以在哪里查看原始数据。
df1 <- data.frame("id" = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3), "value_a" = c(0, 10, 21, 30, 43, 53, 69, 81, 93, 5, 16, 27, 33, 45, 61, 75, 90, 2, 11, 16, 24, 31, 40, 47, 60, 75, 88), "value_b" = c(100, 101, 100, 95, 90, 85, 88, 84, 75, 110, 105, 106, 104, 95, 98, 96, 89, 104, 104, 104, 103, 106, 103, 101, 99, 98, 97), "value_c" = c(0, -1, -2, -2, -2, -2, -1, -1, 0, 0, 0, 0, 1, 1, 2, 2, 1, -1, 0, 0, 1, 1, 2, 2, 1, 1, 0), "value_d" = c(1:27))
df2 <- data.frame("id" = c(1, 2, 3), "value_a" = c(53, 45, 47))
我想使用 df2 中的值在 df1 中进行搜索。因此,对于每个“id”,并且它是 df2 中给出的唯一“value_a”,在 df1 中找到相应的“value_b”和“value_c”,这样我就可以生成一个如下所示的 df3:
df3 <- data.frame("id" = c(1, 2, 3), "value_a" = c(53, 45, 47), "value_b" = c(85, 95, 101), "value_c" = c(-2, 1, 2))
显然,我有数百个“id”要覆盖。由于我想找到多个变量(“value_b”、“value_c”而不是“value_d”)pull() 将不起作用,因为它只提取一个变量。
基于this page,我开始考虑加入。
innerjoin() 也不起作用,因为我必须选择多个变量(id 和 value_a)。像这样合并
df3 <- merge(x = df1, y = df2, by.x = c(id, value_a), by.y = c(id, value_a)) %>%
select(id, value_a, value_b, value_c)
大概是描述我在想什么,但这会引发错误:Error in fix.by(by.x, x) : object 'value_a' not found
我也在考虑使用tapply(),但我坚持使用两个不同的data.frames。有人知道如何解决这个问题吗?
最好的问候,
约翰
【问题讨论】:
标签: r select inner-join tapply