【问题标题】:How to merge dataframes of two lists together (same columns)如何将两个列表的数据框合并在一起(相同的列)
【发布时间】:2021-10-13 20:39:33
【问题描述】:

我有一个包含相同列名的 9 个数据框的列表(称为datalist) 数据帧(称为 L01、L02、... L09)具有以下所有结构:

$L01
               time pressure    level abs_level
2021-04-22 00:00:00 21.05800 2.146454  12.33845
2021-04-22 00:15:00 21.09500 2.150225  12.34223
2021-04-22 00:30:00 21.04800 2.145435  12.33743
> str(datalist)
List of 10
 $ L01     :'data.frame':   9792 obs. of  4 variables:
  ..$ time     : POSIXct[1:9792], format: "2021-04-22 00:00:00" "2021-04-22 00:15:00" "2021-04-22 00:30:00" "2021-04-22 00:45:00" ...
  ..$ pressure : num [1:9792] 21.1 21.1 21 21 21 ...
  ..$ level    : num [1:9792] 2.15 2.15 2.15 2.14 2.14 ...
  ..$ abs_level: num [1:9792] 12.3 12.3 12.3 12.3 12.3 ...
 $ L02     :'data.frame':   9792 obs. of  4 variables:
  ..$ time     : POSIXct[1:9792], format: "2021-04-22 00:00:00" "2021-04-22 00:15:00" "2021-04-22 00:30:00" "2021-04-22 00:45:00" ...
  ..$ pressure : num [1:9792] 19.4 19.4 19.3 19.3 19.3 ...
  ..$ level    : num [1:9792] 1.97 1.98 1.97 1.97 1.97 ...
  ..$ abs_level: num [1:9792] 12.4 12.4 12.4 12.4 12.4 ...

...

我有一个类似的addlist,具有相同结构(相同列和相同顺序)的相同 9 个数据帧(也是 L01、L02、... L09),但这些数据来自不同的时间段。但是我只想把addlist的dataframes合并到datalist,这样addlist的dataframe L01的行添加到datalist的L01的dataframe中),L02到L02,以此类推对其余数据框启用。

所以实际上很容易......我想。我在网上找不到明确的答案。我正在考虑使用 rbind,但我不知道如何在两个列表的上下文中使用它。

我该怎么做?有什么建议?非常感谢!

【问题讨论】:

    标签: r list dataframe rbind


    【解决方案1】:

    这行得通吗?

    finallist <- list()
    
    for(i in 1:length(datalist)){
        finallist[[i]] <- rbind(datalist[[i]],addlist[[i]])
    }
    

    可能有一种更有效的方法可以做到这一点,但如果您要组合的列表顺序相同并且具有相同的列,这应该可以工作

    【讨论】:

    • 您没有将rbind 的结果分配给此处的任何内容;您肯定需要初始化一个“结果”列表,然后将绑定的数据帧存储在其中吗?
    • 是的——刚刚编辑它并在我当前的 R 环境中使用两个对象检查它以确保它这次可以正常工作
    • 你确定这行得通吗?我认为这将在每次迭代中覆盖finallist。最后,finallist 将仅输出最后一个组合。
    • 再次更正,谢谢--刚刚更新以修复该问题(我使用了 1 的列表进行测试)
    【解决方案2】:

    您可以尝试下面的基本 R 代码

    Map(rbind, datalist, addlist)
    

    【讨论】:

      【解决方案3】:

      你可以使用

      df <- do.call('rbind', your_list)
      

      library(data.table)
      
      df <- rbindlist(your_list)
      

      【讨论】:

        【解决方案4】:

        使用 tidyverse 中的purrr,您可以尝试:

        library(purrr)
        map2(datalist, addlist, ~ rbind(.x, .y))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-05-17
          • 1970-01-01
          • 2019-10-27
          • 2017-06-24
          • 1970-01-01
          • 2018-12-19
          • 2015-04-18
          • 2021-12-17
          相关资源
          最近更新 更多