如何通过第三个键变量(R)将来自不同数据帧的两列合并为一个新数据帧

时间:2017-10-01 04:12:15

标签: r dataframe merge key

我有这两个数据帧:

df1< - data.frame(a = c(1,2,3,1,2,3,1,2,3),b = c(11,21,31,12,22,32, 13,23,33))

df2< - data.frame(a = c(1,2,3,1,2,3,1,2,3),c = c(101,201,301,102,202,302,103,203,303))

我想将“b”和“c”列合并到一个新的数据帧中,但使用“a”作为关键变量。

预期结果如下:

df.output< - data.frame(b = c(21,22,23),c = c(201,202,203))

我已经尝试了dplyr的join功能,但是我已经成功了。

谢谢,

quelemem

2 个答案:

答案 0 :(得分:0)

修改

根据OP的其他评论,调整原始解决方案可以实现所需的输出(虽然我认为@akrun's答案在此上下文中选择的更好,因为没有nest / {{1} } 是必须的)。

unnest

原始回答

正如@akrun在评论中提到的那样,期望的输出并不完全清楚。  你的意思是输出吗?

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

答案 1 :(得分:0)

根据评论中OP提到的逻辑,我们filter只能在' a'值为2,然后mutate列' c'通过获得相应的' c'价值是' a'是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))