我有这两个数据帧:
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
答案 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))