【问题标题】:dplyr: compare three (or more) dataframesdplyr:比较三个(或更多)数据帧
【发布时间】:2023-02-16 17:03:55
【问题描述】:

我有三个要与 dplyr 进行比较的数据帧。

df1 <- data.frame(
  id = c(1, 2, 3),
  name = c("Smith", "Winter", "Summer"),
  zip = c(12345, 23456, 34567),
  value = c(1, 2, 3)
)

df2 <- data.frame(
  id = c(1, 2, 3, 5),
  name = c("Smith", "Winter", "Summer", "Taylor"),
  zip = c(12345, 23456, 34567, 56789),
  value = c(4, 5, 6, 0)
)

df3 <- data.frame(
  id = c(1, 2, 4),
  name = c("Smith", "Winter", "Miller"),
  zip = c(12345, 23456, 45678),
  value = c(7, 8, 9)
)

数据帧具有具有相似值的列(即idnamezip)和具有随机数的列(value)。

我想要实现的是一个数据框,它显示具有相似值的列的哪些行(idnamezip)存在于哪些数据框中(我知道我可以删除value select 列,我只是想将其保留以表明数据集也包含变量元素)。

我最终正在寻找这样的东西。

id name zip present_in_df1 present_in_df2 present_in_df3
1 Smith 12345 TRUE TRUE TRUE
2 Winter 23456 TRUE TRUE TRUE
3 Summer 34567 TRUE TRUE FALSE
4 Miller 45678 FALSE FALSE TRUE
5 Taylor 56789 FALSE TRUE FALSE

当然,我也对其他解决方案持开放态度,如果最终有更好的方法来代替这种表示的话。

谢谢你!

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    您可以按行绑定数据框,然后使用例如pivot_wider:

    library(dplyr, warn=FALSE)
    library(tidyr)
    
    dplyr::lst(df1, df2, df3) |> 
      bind_rows(.id = "df") |> 
      mutate(value = TRUE) |> 
      pivot_wider(names_from = df, values_from = value, names_prefix = "present_in_", values_fill = FALSE)
    #> # A tibble: 5 × 6
    #>      id name     zip present_in_df1 present_in_df2 present_in_df3
    #>   <dbl> <chr>  <dbl> <lgl>          <lgl>          <lgl>         
    #> 1     1 Smith  12345 TRUE           TRUE           TRUE          
    #> 2     2 Winter 23456 TRUE           TRUE           TRUE          
    #> 3     3 Summer 34567 TRUE           TRUE           FALSE         
    #> 4     5 Taylor 56789 FALSE          TRUE           FALSE         
    #> 5     4 Miller 45678 FALSE          FALSE          TRUE
    

    【讨论】:

      猜你喜欢
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 2019-07-21
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多