【问题标题】:how can I rbind two dataframe that has different variables [duplicate]我怎样才能绑定两个具有不同变量的数据框[重复]
【发布时间】:2021-02-12 16:15:43
【问题描述】:

我有一个如下所示的数据集:

我想合并这两个数据集。我怎样才能做到这一点。我不能使用rbind,因为 df 有更多的变量。 可以使用代码构建示例数据:

df<-structure(list(ID = c(1, 2, 3), High = c(25, 36, 75), weight = c(38, 
58, 36), date = c(1, 1, 1)), row.names = c(NA, -3L), class = c("tbl_df", 
"tbl", "data.frame"))

df2<-structure(list(ID = c(1, 2, 3, 1, 2, 3), weight = c(69, 58, 35, 
65, 24, 15), date = c(3, 3, 3, 2, 2, 2)), row.names = c(NA, -6L
), class = c("tbl_df", "tbl", "data.frame"))

最终的结果应该是这样的:

【问题讨论】:

    标签: r


    【解决方案1】:

    如果您的数据集很大,请尝试使用 data.table 包进行此类操作。如果您想了解更多信息,Here 是一个小插曲。

    这是使用 data.table 包的代码:

    library(data.table)
    setDT(df)
    setDT(df2)
    
    result<-rbindlist(list(df,df2),fill=T)
    

    请注意,允许行不同的关键参数是 fill=TRUE

    【讨论】:

    • 非常感谢。是否可以使用 df 值为 df2 填充高值?所以最终数据对于每条记录都会具有高值?
    • 这么说,你的意思是你想给与df2对应的值赋予与df中对应的ID相同的高吗?试试这个: rbindlist(list(df,df2),fill=T)[, High := (max(High,na.rm = T)), by = ID] 如果是这样的话,这个“技巧”应该可以完成工作你的意思是。
    【解决方案2】:

    您可以使用bind_rows() 中的dplyr

    df1 <- tibble::tribble(
      ~ID, ~High, ~weight, ~date, 
      1, 25, 38, 1,
      2, 36, 58, 1,
      3, 75, 36, 1
    )
    
    df2 <- tibble::tribble(
      ~ID, ~weight, ~date, 
      1, 69, 3,
      2, 58, 3, 
      3, 35, 3, 
      1, 65, 2, 
      2, 24, 2,
      3, 15, 2
    )
    
    
    bind_rows(df1, df2)
    # # A tibble: 9 x 4
    #      ID  High weight  date
    #   <dbl> <dbl>  <dbl> <dbl>
    # 1     1    25     38     1
    # 2     2    36     58     1
    # 3     3    75     36     1
    # 4     1    NA     69     3
    # 5     2    NA     58     3
    # 6     3    NA     35     3
    # 7     1    NA     65     2
    # 8     2    NA     24     2
    # 9     3    NA     15     2
    
    

    【讨论】:

    • 结果与 df​​2 有何不同?
    • 不是,因为代码中的数据框实际上和图片中的不一样。
    • 我已更新帖子以包含预期结果
    【解决方案3】:

    这是您的预期输出吗?

    > merge(df1, df2, all = TRUE)
      ID weight date High
    1  1     38    1   25
    2  1     65    2   NA
    3  1     69    3   NA
    4  2     24    2   NA
    5  2     58    1   36
    6  2     58    3   NA
    7  3     15    2   NA
    8  3     35    3   NA
    9  3     36    1   75
    

    【讨论】:

      猜你喜欢
      • 2014-08-19
      • 2018-04-12
      • 2015-04-19
      • 2015-08-07
      • 2022-06-13
      • 1970-01-01
      • 2019-10-30
      • 2023-02-05
      • 1970-01-01
      相关资源
      最近更新 更多