在选择要加入的列时加入多个 data.frame

Posted

技术标签:

【中文标题】在选择要加入的列时加入多个 data.frame【英文标题】:Join multiple data.frame while selecting the columns to join 【发布时间】:2021-10-14 05:06:19 【问题描述】:

我有 10 个具有相同 data.frame 结构 [75 x 1259] 的 csv 文件。它们是使用列表导入到 R 中的。我想在每个 csv 文件中获取相同的列并创建一个新的 data.frame [75 X 11],所以最后我有 1259 个 75 X 11 的数据帧(11 列,因为第一列在每个data.frame,因此它可以用于“by=”参数)。

我曾经有一个代码可以为 3 个 data.frame 做到这一点,这不是很复杂。

Tab<-function(k)
  left_join(select(Ini1, c("value",k)), select(Aug2, c("value",k)), by="value") %>%
   left_join(., select(Dim2, c("value",k)), by="value") 

for (k in 2:1258) 
  write.csv(data.frame(Tab(k)), paste0('/Users/Tableau des features/',k,'.csv'), row.names = T)

如果我不必再做 7 个管道,我会很高兴的。我读了这个Simultaneously merge multiple data.frames in a list 来帮助我理解合并多个data.frame。下面的代码听起来不错。

csv.list %>% reduce(left_join, by="value")

唯一的问题是我如何选择要合并的列。

【问题讨论】:

【参考方案1】:

如果csv.list 是一个数据框列表并且value 列存在于所有数据框中,那么您可以像这样使用Reduce 函数:

library(tidyverse)
## select same column from every dataframe 
new_csv_list <- lapply(csv.list, function(x) x %>% select(value, Image))
## Merge all the dataframe using the updated list
df <- Reduce(function(x,y) merge(x, y, by = 'value', all.x = TRUE), new_csv_list)

【讨论】:

如何指定要合并的列?例如,如果我只想在每个文件中使用 c("value", "Image")。 如果你所有的数据框列名都像("value", "Image") 那么合并后会导致命名困难。你会看到这样的列名value, image.x, image.y, image.z, .... 我知道这在某些项目中可能是个问题,但在我的情况下并不是因为 x=observer 1, y= observer 2 ... 而且更容易做 ICC。 如果您想实现您所提到的,请查看更新的答案。

以上是关于在选择要加入的列时加入多个 data.frame的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 0.20.3“KeyError:'[1 2] not in index'”尝试选择要在 DataFrame 中显示的列时 [重复]

为啥加入从视图中选择前 N 比加入视图要快得多?

加入和分组依据 - 选择列表中的列无效

在更新一个表的列相对于另一个表的列时避免多个 SELECT

Pyspark 与 AWS Glue 在多个列上加入创建重复项

如何加入(合并)数据框(内、外、左、右)