创建一个具有文件名的列,用于多个数据框。

12 浏览
0 Comments

创建一个具有文件名的列,用于多个数据框。

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

我正在尝试使用apply()函数来处理多个文件,具体操作如下:

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

我需要一个函数,将一个列添加到数据框中,告知变量属于哪个样本,因为之后我会合并所有样本。这个函数不仅需要读取多个excel文件,还需要在每个文件中添加一个带有文件名的列(如示例所示)。我在其他问题中找不到类似的方法。

我尝试使用lapply,但没有成功。我需要这样做是因为我想合并超过100个数据框(我可以手动完成,但不使用apply似乎有些愚蠢)。

所有文件都具有相同的列,因此不需要在一个文件中不存在的列中放入NA的函数。

0
0 Comments

创建一个包含文件名的列的列的原因是为了将多个数据框合并成一个数据框,并在合并后的数据框中添加一个表示文件名的列。这样做的目的可能是为了方便对数据进行分析和整理。

解决方法是使用lapply函数遍历文件名列表,对每个文件进行读取,并在读取后的数据框中添加一个表示文件名的列。然后使用do.call函数将所有数据框合并成一个数据框。

以下是一种解决方法的示例代码:

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)

另外一种更简洁的解决方法是使用transform函数或within函数在lapply函数内部一行代码中完成添加列的操作。具体代码如下:

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)

还有一种解决方法是使用list.files函数获取文件名列表,然后使用lapply函数遍历文件名列表,对每个文件进行读取,并在读取后的数据框中添加一个表示文件名的列。具体代码如下:

dta_files <- list.files('C:/Users', pattern = 'Sample', full.names = F)
out_l <- lapply(dta_files, function(x) {
  transform(read_excel(paste0(x)), Sample = x)
})
out_df <- do.call(rbind.data.frame, out_l)

以上是关于如何为多个数据框创建一个包含文件名的列的原因和解决方法的介绍。这些方法可以帮助我们方便地合并和整理多个数据框,并在合并后的数据框中添加表示文件名的列。

0