【发布时间】:2017-10-01 04:12:15
【问题描述】:
我有这两个数据框:
df1
df2
我想将“b”和“c”列合并到一个新的数据框中,但使用“a”作为关键变量。
预期的结果是这样的:
df.output
我已经尝试过 dplyr 的 join 功能,但没有成功。
谢谢,
问号
【问题讨论】:
我有这两个数据框:
df1
df2
我想将“b”和“c”列合并到一个新的数据框中,但使用“a”作为关键变量。
预期的结果是这样的:
df.output
我已经尝试过 dplyr 的 join 功能,但没有成功。
谢谢,
问号
【问题讨论】:
根据 OP 在 cmets 中提到的逻辑,我们可以 filter 仅 'a' 中值为 2 的行,然后 mutate 通过获取相应的 'c' 值为 'a' 列 'c' ' 是 2
library(dplyr)
df1 %>%
filter(a == 2) %>%
mutate(c = df2$c[a ==df2$a]) %>%
select(-a)
# b c
#1 21 201
#2 22 202
#3 23 203
或使用base R
cbind(subset(df1, a==2, select = b), subset(df2, a==2, select = c))
【讨论】:
编辑
基于 OP 的额外 cmets,调整原始解决方案可以实现所需的输出(尽管我认为 @akrun's 答案在这种情况下是更好的选择,因为不需要 nest / unnest)。
library(tidyverse)
left_join(nest(df1, -a), nest(df2, -a), by = "a") %>%
filter(a == 2) %>% unnest() %>% select(-a)
#> b c
#> 1 21 201
#> 2 22 202
#> 3 23 203
原答案
正如@akrun 在 cmets 中提到的,所需的输出并不完全清楚。
你的意思是这样的输出吗?
library(tidyverse)
df3 <- left_join(nest(df1, -a), nest(df2, -a), by = "a")
df3
#> a data.x data.y
#> 1 1 11, 12, 13 101, 102, 103
#> 2 2 21, 22, 23 201, 202, 203
#> 3 3 31, 32, 33 301, 302, 303
【讨论】: