如何在不丢失数据的情况下在 R 中创建 tibbles 列表(来自 xlsx 文件)?

How to create a list of tibbles (from xlsx files) in R without losing data?

我需要在 R 中读取一些反复无常的 xlsx 文件。将它们转换为 csv 会弄乱列名,因此我不得不使用替代方法。我可以使用库 readxl 和函数 read_xlsx().

读取我的文件

我的想法是循环读取每个文件以验证它们并将它们放入列表中。然后循环列表的每个元素并对每个文件进行处理。

然而,read_xlsx() 输出是一个小问题。我对他们一无所知,但他们似乎不喜欢被放入列表或从列表中提取。

例如,我使用这样的 excel 文件

this is a test
1 2 3 4
5 6 7 8

使用这样的代码:

filenames <- list.files(path = "../Data")
dataList <- list()

for (filename in filenames) {
  filepath <- paste0("../Data/", filename)
  data <- read_xlsx(filepath)
  print(data)
  dataList[filename] <- data
  print(dataList)
}

输出将是

# A tibble: 2 x 4
   this    is     a  test
  <dbl> <dbl> <dbl> <dbl>
1     1     2     3     4
2     5     6     7     8

[[1]]
[1] 1 5

为什么我丢失了这么多数据?有什么方法可以创建一个 tibbles 列表以便稍后操作列表中的每个元素?

要访问列表项,您需要 [[ 而不是 [

filenames <- list.files(path = "../Data")
dataList <- list()

for (filename in filenames) {
  filepath <- paste0("../Data/", filename)
  data <- read_xlsx(filepath)
  dataList[[filename]] <- data
}

实现此目的的另一种方法是 foreach 包,它将 return 一个列表。

library(foreach)

dataList <- foreach(filename = filenames, 
                    .final = function(x) { setNames(x, filenames) }) %do% {
  filepath <- paste0("../Data/", filename)
  data <- read_xlsx(filepath)
  data
}