【问题标题】:Appending rows only if a row's ID value in df1 is also present in df2仅当 df1 中的行 ID 值也存在于 df2 中时才附加行
【发布时间】:2021-01-08 19:54:35
【问题描述】:

我有两个要相互附加的数据框。但是,如果 df1 中存在 ID 变量值,我只想附加 df2。这是一种合并的追加,但我不确定如何最好地做到这一点。数据是这样的

str(df1)

ID y  x time
1  15 6  1
2  12 3  1
3  10 8  1

str(df2)

ID y  x time
1  12 3  2
3   8 4  2
4  15 2  2

我想以df3结束:

ID y  x time
1  15 6  1
2  12 3  1
3  10 8  1 
1  12 3  2
3   8 4  2

intact_IL <- bind_rows(df1, df2) 给了我df1df2 的所有人。使用其他 dplyr 动词的各种尝试对我来说都不起作用。

感谢任何建议!

【问题讨论】:

    标签: r dataframe append


    【解决方案1】:

    这个怎么样:

    intact_IL <- bind_rows(df1, df2 %>% filter(ID %in% df1$ID))
    

    【讨论】:

    • 这对@LocoGris 很有帮助!如果我有 5 个这样设置的数据框怎么办。在bind_rows 语句中命名它们是否有意义,或者一次创建两个数据帧是否有意义?
    • 我可以,我只需要在每个命名为df 之后的过滤器语句。所以这行得通:intact_IL &lt;- bind_rows(df1, df2 %&gt;% filter(ID %in% df1$ID), df3 %&gt;% filter(ID %in% df1$ID))
    【解决方案2】:

    base R 的选项

    rbind(df1, subset(df2, ID %in% df1$ID))
    #  ID  y x time
    #1  1 15 6    1
    #2  2 12 3    1
    #3  3 10 8    1
    #4  1 12 3    2
    #5  3  8 4    2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-20
      • 2021-03-03
      • 2020-02-27
      • 1970-01-01
      • 2019-07-06
      • 1970-01-01
      • 2021-06-08
      • 2021-08-27
      相关资源
      最近更新 更多