【发布时间】:2020-05-12 09:38:16
【问题描述】:
我正在尝试 left_join 跨列表中多个数据框的数据框,这是列表和数据框的示例:
list1 = lapply(1:3, function(x) data.frame(x = rnorm(10), y = rnorm(10), z = rnorm(10), fac = sample(c("new","old"), 10, replace = TRUE)))
df_1 = data.frame(fac = sample(c("new","old"),10,replace = TRUE), t = rnorm(10))
现在,我确定我可以使用 for 循环和以下内容将数据框添加到列表的每个组件中。但是,我认为应该有一种使用 lapply 的简单方法来做到这一点,例如:
lapply(list1,function(x) x %>% left_join(x,df_1, by = c("fac")))
虽然这不起作用,但我哪里出错了?我猜你也可以从 purrr 中以某种方式使用map。上面示例中没有完全体现的一个重要方面是我需要通过匹配因子连接数据框,因此简单的 cbind 是不够的。
谢谢
【问题讨论】:
-
试试
lapply(list1, cbind, t=df_1$t)。 -
这只是将它绑定到数据帧上吗?我需要匹配的因素。我的 repex 不是很好,但我需要 df_1 中的因子来匹配列表中的因子,因此 left_join。
-
是的,但你只有一种
"new"的因子,应该是唯一的,因此这对我来说没有多大意义。 -
我认为这更清楚。因子有多个级别,因此需要连接。
-
map(list1, left_join, df_1, by = "fac")为list1和df_1中的每个数据帧执行左连接。然而,正如@jay.sf 已经指出的那样,这没有任何意义,因为基于fac的匹配是任意的,即df_1中的任何新的或旧的都可以与每个@ 中的任何其他新的或旧的匹配。 987654331@ 数据框。
标签: r dplyr left-join tidyverse