如何将两个列表的数据帧合并在一起(相同的列)
How to merge dataframes of two lists together (same columns)
我有一个包含 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
的数据帧合并到 datalist
,以便将 addlist
的数据帧 L01 的行添加到 datalist
中 L01 的数据帧)、L02 到 L02,其余数据帧依此类推。
所以实际上很容易...我想。我无法在互联网上清楚地找到答案。我正在考虑使用 rbind,但我不知道如何在两个列表的上下文中使用它。
我该怎么做?有什么建议么?非常感谢!
这个有用吗?
finallist <- list()
for(i in 1:length(datalist)){
finallist[[i]] <- rbind(datalist[[i]],addlist[[i]])
}
可能有更有效的方法来执行此操作,但如果您要合并的列表顺序相同且具有相同的列,则此方法应该有效
你可以使用
df <- do.call('rbind', your_list)
或
library(data.table)
df <- rbindlist(your_list)
您可以尝试下面的基本 R 代码
Map(rbind, datalist, addlist)
使用 tidyverse 中的 purrr
,您可以尝试:
library(purrr)
map2(datalist, addlist, ~ rbind(.x, .y))
我有一个包含 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
的数据帧合并到 datalist
,以便将 addlist
的数据帧 L01 的行添加到 datalist
中 L01 的数据帧)、L02 到 L02,其余数据帧依此类推。
所以实际上很容易...我想。我无法在互联网上清楚地找到答案。我正在考虑使用 rbind,但我不知道如何在两个列表的上下文中使用它。
我该怎么做?有什么建议么?非常感谢!
这个有用吗?
finallist <- list()
for(i in 1:length(datalist)){
finallist[[i]] <- rbind(datalist[[i]],addlist[[i]])
}
可能有更有效的方法来执行此操作,但如果您要合并的列表顺序相同且具有相同的列,则此方法应该有效
你可以使用
df <- do.call('rbind', your_list)
或
library(data.table)
df <- rbindlist(your_list)
您可以尝试下面的基本 R 代码
Map(rbind, datalist, addlist)
使用 tidyverse 中的 purrr
,您可以尝试:
library(purrr)
map2(datalist, addlist, ~ rbind(.x, .y))