r - 使用 R 和 purrr 使用带有 pmap 的列表列表连接多个数据帧
问题描述
我正在尝试使用 pmap 将嵌入在列表中的数据帧连接在一起。
library(purrr)
library(plyr)
# Create a list of 5 data frames
create_df <- function(){
map(1:5, ~ data.frame(country = c("USA", "CHINA", "JAPAN", "FRANCE"),
col = sample.int(100, 4))
)
}
# Create a list of lists
list_of_list_of_dataframes <- map(1:3, ~ create_df())
# join the first element of the 3 lists together.
list_of_dataframes <- pmap(list_of_list_of_dataframes, join_all, by = 'country', type = 'left')
我遇到的问题是 plyr 的这个join_all
功能似乎不起作用。我得到错误:
Error in .f(.l[[c(1L, i)]], .l[[c(2L, i)]], .l[[c(3L, i)]], ...) :
unused argument (.l[[c(3, i)]])
我可以list_of_dataframes <- pmap(list_of_list_of_dataframes, cbind)
将数据框绑定在一起,但它不会删除我也匹配的索引列,并假设左列的顺序是相同的。
解决方案
您可以使用 dplyr 的 left_join + purrr 的 reduce 和 map2。但它的可读性不如@Tung 的答案。
reduce(list_of_list_of_dataframes, map2, left_join, by = "country")
[[1]]
country col.x col.y col
1 USA 82 31 59
2 CHINA 7 65 29
3 JAPAN 62 58 52
4 FRANCE 70 88 35
[[2]]
country col.x col.y col
1 USA 17 77 23
2 CHINA 5 86 92
3 JAPAN 70 55 73
4 FRANCE 68 42 13
[[3]]
country col.x col.y col
1 USA 51 10 20
2 CHINA 60 82 65
3 JAPAN 65 90 56
4 FRANCE 64 30 10
[[4]]
country col.x col.y col
1 USA 9 53 36
2 CHINA 60 5 89
3 JAPAN 51 88 69
4 FRANCE 6 14 11
[[5]]
country col.x col.y col
1 USA 63 30 94
2 CHINA 92 16 21
3 JAPAN 11 52 27
4 FRANCE 58 100 66
推荐阅读
- javascript - 如何仅在 JS 中获得四舍五入的小数?
- excel - 如何在保留公式的同时将小数显示为百分比
- r - SD 组内 MLA 使用 statsby
- javascript - 组织数据以从 .json 文件制作表格
- dataframe - 在 weka 上插入 - 不向我显示文件
- c# - 如何在带有 Dapper 的 Windows 窗体应用程序中直接从 PictureBox 保存图像,而无需使用 Dapper 存储过程?
- amazon-s3 - AWS SDK 3 WriteGetObjectResponseCommand 问题
- php - Wordpress 后分页不起作用重定向回发
- react-native - react-native 使用 FCM 推送通知 IOS & Android
- python - 在项目中使用两个连接器时如何正确关闭 MariaDB 和 MySQL 连接