套用到left_join数据集列表

时间:2020-02-26 13:31:17

标签: r for-loop left-join lapply

我有两个要left_join的数据集列表。它们是有序的,因此list1上的第一个数据集应与list2上的第一个数据集,list1上的第二个数据集和list2上的第二个数据集连接在一起,依此类推。 。我一直在尝试使用lapply来执行此操作,但收到以下错误消息:

enter image description here

以下是一些示例数据:

set.seed(1234)

n1 <- LETTERS[1:10]
x1 <- rnorm(10,1) 
y1 <- rnorm(10,2)
z1 <- rnorm(10,3)

n2 <- LETTERS[5:14]
x2 <- rnorm(10,1) 
y2 <- rnorm(10,2)
z2 <- rnorm(10,3)

df1 <- data.frame(n1,x1,y1,z1)  
df2 <- data.frame(n2,x2,y2,z2)  
list1 <- list(df1, df2)

n1 <- LETTERS[5:14]
x3 <- rnorm(10,2) 
y3 <- rnorm(10,3)
z3 <- rnorm(10,4)

n2 <- LETTERS[1:10]
x4 <- rnorm(10,2) 
y4 <- rnorm(10,3)
z4 <- rnorm(10,4)

df3 <- data.frame(n1,x3,y3,z3)  
df4 <- data.frame(n2,x4,y4,z4)  
list2 <- list(df3, df4)

这是我要工作的代码:

lapply(list1, function(x) left_join(x, list2[[x]]))

3 个答案:

答案 0 :(得分:2)

我认为您应该在此处使用Map

Map(dplyr::left_join, list1, list2)

要使用lapply,可以遍历索引。

lapply(seq_along(list1), function(x) dplyr::left_join(list1[[x]], list2[[x]]))

答案 1 :(得分:2)

使用purrr,您可以执行以下操作:

map2(.x = list1, 
     .y = list2, 
     ~ left_join(.x, .y))

[[1]]
   n1         x1       y1       z1       x3       y3       z3
1   A -0.2070657 1.522807 3.134088       NA       NA       NA
2   B  1.2774292 1.001614 2.509314       NA       NA       NA
3   C  2.0844412 1.223746 2.559452       NA       NA       NA
4   D -1.3456977 2.064459 3.459589       NA       NA       NA
5   E  1.4291247 2.959494 2.306280 2.656588 3.006893 3.822210
6   F  1.5060559 1.889715 1.551795 4.548991 2.544531 3.830006
7   G  0.4252600 1.488990 3.574756 1.965240 2.633476 2.627698
8   H  0.4533681 1.088805 1.976344 1.330366 3.648287 3.826213
9   I  0.4355480 1.162828 2.984862 1.992395 5.070271 4.850232
10  J  0.1099622 4.415835 2.064051 3.777084 2.846602 4.697609

[[2]]
   n2         x2        y2       z2       x4       y4       z4
1   E  2.1022975 3.4494963 1.193969 1.504417 2.174001 4.022363
2   F  0.5244069 0.9313573 2.417924 2.355550 3.166989 4.831141
3   G  0.2905600 1.1446354 1.891110 0.865392 2.103735 2.755712
4   H  0.4987419 1.7193770 1.985038 2.878204 3.168185 4.169026
5   I -0.6290935 1.0056599 2.837690 2.972917 3.354968 4.673166
6   J -0.1676193 1.0314857 3.563056 4.121117 2.947895 3.973724
7   K -1.1800396 0.8926818 4.647817       NA       NA       NA
8   L -0.3409932 0.7480141 2.226647       NA       NA       NA
9   M  0.7057061 1.4761719 4.605910       NA       NA       NA
10  N  0.5341025 1.5031500 1.842191       NA       NA       NA

答案 2 :(得分:1)

应为import { Topology } from "topojson-specification" // needed type for mesh API // alternatively use a custom compatible json type import us_ from "./counties-albers-10m.json" const us: Topology = us_ as Topology; topojson.mesh(us, ...) // this should work now 而不是mapply

lapply