r - 将 lapply 与 R 中两个列表中的数据一起使用
问题描述
我有两个列表,我想使用 lapply 来获取一个新列表
数据是
library(dplyr)
list.A <- list(df1=data.frame(x= c(1:5), y = letters[1:5], z= rep(1,5)),
df2=data.frame(x= c(10:15), y = letters[5:10], z= rep(10,6)))
list.B <- list(df1=data.frame(x= c(1:6), var2 = letters[10:15], var3= rep(7,6)),
df2=data.frame(x= c(10,12), var2 = letters[1:2], var3= rep(5,2)))
我希望结果如下
dat.1 <- left_join(list.A[[1]], list.B[[1]], by=("x"))
dat.2 <- left_join(list.A[[2]], list.B[[2]], by=("x"))
new.list <- list(df1 = dat.1, df2 =dat.2)
但是当我使用 lapply 时,结果很奇怪,而不是我希望的那样
new.list <- lapply(list.A, function(a){lapply(list.B, function(b){
df <-left_join(a, b, by=("x"))
})
})
任何帮助,请。我需要应用循环或 lapply 会工作吗?我的实际列表有很多数据框
解决方案
我们需要map2
frompurrr
因为这循环遍历两个列表的每个相应元素并执行left_join
by
“x”列
library(dplyr)
library(purrr)
map2(list.A, list.B, ~ left_join(.x, .y, by = 'x'))
-输出
#$df1
# x y z var2 var3
#1 1 a 1 j 7
#2 2 b 1 k 7
#3 3 c 1 l 7
#4 4 d 1 m 7
#5 5 e 1 n 7
#$df2
# x y z var2 var3
#1 10 e 10 a 5
#2 11 f 10 <NA> NA
#3 12 g 10 b 5
#4 13 h 10 <NA> NA
#5 14 i 10 <NA> NA
#6 15 j 10 <NA> NA
或Map
(从base R
)
Map(merge, list.A, list.B, MoreArgs = list(all.x = TRUE, by = 'x'))
推荐阅读
- android - Xamarin.forms - Xam.Plugin.Media 抛出错误 此功能未在此程序集的可移植版本中实现
- prolog - 删除一封信
- c# - System.SpanExtensions 在哪里?
- powershell - Set-Content 将创建新文件但不会替换旧文件
- javascript - jQuery - 验证
- python - 使用 BeautifulSoup 将所有 href 刮到列表中
- css - 宝贝步骤将scss编译为css
- bash - Bash 脚本检查是否成功 curl
- javascript - 找到一个字符的出现
- javascript - Rxjs 订阅调用两次 ionic 3 angular 5