【发布时间】:2018-01-25 21:47:04
【问题描述】:
假设我有这个数据框列表:
library(tidyverse)
df_list <- list(data.frame(cheese = c("ex","ok","bd"),
cheese_val = c(3:1),
stringsAsFactors = F),
data.frame(egg = c("great","good","bad", "eww"),
egg_val = c(4:1),
stringsAsFactors = F),
data.frame(milk = c("good","bad"),
milk_val = c(2:1),
stringsAsFactors = F))
我有这个核心数据集:
core_dat <- data.frame(cheese = c("ex","ok","ok", "bd", "ok"),
egg = c("great", "bad", "bad", "eww", "great"),
milk = c("good", "good", "good", "bad", "good"),
stringsAsFactors = F)
我想让core_dat 与df_list 的每个元素单独连接。
然后我尝试了这个:
for(i in 1:length(df_list)) {
gg<-core_dat %>%
left_join(df_list[[i]], by = names(df_list[[i]][1]), copy = T)
}
它运行但仅将连接应用于milk 列,因此core_dat 中唯一的附加列是milk_val,但我预计也会看到cheese_val 和egg_val。
我怀疑这里有比 for 循环更合适的选项,我正在寻找建议。请注意,我的实际数据集比这个小例子有更多的 df。
我不应该期望生成的数据框,在本例中为 gg,总共包含 6 列(3 个标准名称 + 3 个带有“val”后缀的列),因此它看起来像这样的打印版本:
data.frame(cheese = c("ex","ok","ok", "bd", "ok"),
egg = c("great", "bad", "bad", "eww", "great"),
milk = c("good", "good", "good", "bad", "good"),
chees_val = c(3, 2, 2, 1, 2),
egg_val = c(4, 2, 2, 1, 4),
milk_val = c(2, 2, 2, 1, 2))
我在这里看到了许多“多重连接”的答案,但没有一个与我在这里想要完成的任务完全一致(不同的键列、不同的数据长度)。
【问题讨论】:
-
试试
map(df_list, left_join, core_dat)或right_join不确定预期的输出是什么 -
你可以做
lapply(df_list,merge,core_data) -
@missuse -
map没有提供想要的结果:我更新了一些问题。 -
我们能看到你想要的输出吗?这个例子?
标签: r list dataframe left-join