首页 > 解决方案 > 从Excel文件中绑定多个dfs

问题描述

我目前正在将多个 excel 文件中的数据合并到一个 df 中。问题是,文件中的列数不同(由于不同的实验版本),所以我只需要绑定每个文件中的某些列/变量(它们具有相同的名称)。

我首先尝试“手动”执行此操作,使用:

library(openxlsx)
PWI <- read.xlsx("/Users/myname/Desktop/PrelimPWI/PWI_1_V1A.xlsx", colNames = TRUE, startRow = 2)
Slim_1 <- data.frame(PWI$Subject, PWI$Block, PWI$Category, PWI$Trial,PWI$prompt1.RT)
#read in and pull out variables of interest for one subject
mergedFullData = merge(mergedDataA, mergedDataB) 
#add two together, then add the third to the merged file, add 4th to that merged file, etc

显然,似乎有一种更简单的方法来组合文件。我一直在努力使用:

library(openxlsx)

path <- "/Users/myname/Desktop/PrelimPWI"
merge_file_name <- "/Users/myname/Desktop/PrelimPWI/merge_file_name.xlsx"

filenames_list <- list.files(path= path, full.names=TRUE)

All <- lapply(filenames_list,function(merge_file_name$Subject){
  print(paste("Merging",merge_file_name,sep = " "))
  read.xlsx(merge_file_name, colNames=TRUE, startRow = 2)
})
PWI <- do.call(rbind.data.frame, All)
write.xlsx(PWI,merge_file_name)

但是,我不断收到列数不匹配的错误,但我不确定在哪里提取我需要的特定变量(早期代码中列出的变量)。我尝试过的任何其他调整都导致只有第一个文件被写入 xlsx,或者是一个完全空白的 df。任何帮助将不胜感激!

标签: rdataframemergexlsxrbind

解决方案


library(tidyverse)

df1 <- tibble(
  a = c(1,2,3),
  x = c(4,5,6)
)

df2 <- tibble(
  x = c(7,8,9),
  y = c("d","e","f")
)

bind_rows(df1, df2)

from的bind功能dplyr应该可以帮助你。它们可以按行或列将数据框绑定在一起,并且可以灵活地处理不同的列名。

然后,您可以选择要保留的实际列。


推荐阅读