为许多数据框创建具有文件名的列

时间:2018-07-05 18:11:27

标签: r loops dataframe apply

我目前正在使用R Studio版本1.0.143和R版本3.4.4。

我正在尝试创建一个apply()函数,该函数对许多文件执行以下操作:

df1 <- read_excel("Sample 1.xlsx")
df1["Sample"] <- "Sample 1"
df2 <- read_excel("Sample 2.xlsx")
df2["Sample"] <- "Sample 2"
rbind(df1, df2) -> final

一个向数据框添加一列以告知变量属于哪个样本的函数,因为在此之后我将绑定所有样本。不仅此功能必须读取许多excel文件,而且还需要在每个文件中添加带有文件名的列(作为示例)。我在其他问题上找不到类似的东西

我尝试使用lapply,但没有成功。我需要这样做是因为我想合并100个以上的数据帧(我可以手工完成,但是似乎不使用apply显得很愚蠢)。 所有文件都具有相同的列,因此,当一个文件中不存在任何列时,就不需要使用将NA放进去的功能。

1 个答案:

答案 0 :(得分:1)

names <- c("Sample 1", "Sample 2")

out_l <- lapply(names, function(x) {
  tmp_df <- read_excel(paste0(x, ".xlsx"))
  tmp_df[["Sample"]] <- x
  tmp_df
})
out_df <- do.call(rbind.data.frame, out_l)

或者根据@Parfait的评论使用较短的版本

names <- c("Sample 1", "Sample 2")

out_l <- lapply(names, function(x) {
  transform(read_excel(paste0(x, ".xlsx")), Sample = x)
})
out_df <- do.call(rbind.data.frame, out_l)