【问题标题】:How to merge two columns from different dataframes into a new dataframe by a third key variable (R)如何通过第三个关键变量(R)将来自不同数据帧的两列合并到一个新的数据帧中
【发布时间】:2017-10-01 04:12:15
【问题描述】:

我有这两个数据框:

df1

df2

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

预期的结果是这样的:

df.output

我已经尝试过 dplyr 的 join 功能,但没有成功。

谢谢,

问号

【问题讨论】:

    标签: r dataframe merge key


    【解决方案1】:

    根据 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))
    

    【讨论】:

      【解决方案2】:

      编辑

      基于 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
      

      【讨论】:

      • 我想将列“b”和“c”合并到一个新的数据框中,但只选择与变量“a”的数字 2 对应的行。预期结果为: b c 21 201 22 202 23 203
      • 我试过这个解决方案,但没有成功: library(plyr) df3
      • @quelemem,我已经根据 cmets 编辑了我的答案
      猜你喜欢
      • 2021-03-10
      • 1970-01-01
      • 1970-01-01
      • 2020-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-10
      • 1970-01-01
      相关资源
      最近更新 更多