【问题标题】:Load multiple excel files and name object after a file name加载多个excel文件并在文件名后命名对象
【发布时间】:2018-05-12 10:26:50
【问题描述】:

我已经阅读了几个与此相关的问题,但没有一个是我想要的。

目前为止最好的是使用readxlpackage

library(readxl)
file.list <- list.files(pattern='*.xlsx')
df.list <- lapply(file.list, read_excel)

但正如它所解释的,它给出了一个列表。 我想要的是在工作目录中按名称获取每个文件

我正在做的是让setwd进入我拥有所有xls文件的目录,然后我根据它们的名称一一加载它们,例如

mydf1 <- read_excel("mydf1.xlsx")
mydfb <- read_excel("mydfb.xlsx")
datac <- read_excel("datac.xlsx")

有没有其他方法可以在不一遍又一遍地重复名称的情况下获得它们?

【问题讨论】:

  • “获取每个文件”是什么意思。你的意思是你只想得到文件的名字?你的意思是你想在data.frame中打开它吗?还是有什么不同?另外,您可以发布 str(df.list) 的结果吗?我想知道您是否已经拥有所有文件的列表。我很好奇当您运行 names(df.list) 时会发生什么,以及这是否会为您提供所有文件的名称。

标签: r


【解决方案1】:

您可以将assignfor 循环一起使用:

library(readxl)
file.list <- list.files(pattern = "*.xlsx")
for(i in file.list) {
    assign(sub(".xlsx", "", i), read_excel(i))
}

PS.:你需要sub 来删除文件扩展名(否则你会得到对象mydf1.xlsx 而不是mydf1)。

【讨论】:

    【解决方案2】:

    这是 purrr 包的完美用例:

    library(readxl)
    library(tidyverse) #loads purrr
    #for each excel file name, read excel sheet and append to df
    df.excel <- file.names %>% map_df( ~ read_excel(path = .x))
    

    【讨论】:

    • 我喜欢你的回答
    • @SethRaithel:可以展示如何添加带有源文件名的列吗?
    • @SethRaithel:还有 - 路径 = .x 中的 .x 是什么意思?我不遵循这种语法。 (学习者)
    • @val 添加带有文件名的 mutate 语句。 df.excel % map_df( ~ read_excel(path = .x) %>% mutate("file.name" = .x)) 有关 .x 符号的信息,请参阅stackoverflow.com/questions/35272457/…。它基本上和 data$col1 的意思一样
    【解决方案3】:

    你可以在你的循环中使用这样的东西:

    lapply(seq_along(file.list), function(x){
      df<-read_excel(x)
      y<-gsub("\\..*","",x)
      assign(y, df, envir=globalenv())
    })
    

    【讨论】:

    • 我喜欢你的回答
    【解决方案4】:

    您只认为您希望将每一个都加载到全局环境中。随着您对 R 的熟悉程度越来越高,您会发现在大多数(如果不是全部)情况下,最好将这样的相关对象放在一个列表中。

    如果它们都在一个列表中,那么您可以使用lapplysapply 对每个元素运行相同的命令,而不是尝试创建一个新的循环来获取每个对象并对其进行处理。

    列表方法不太可能覆盖您可能想要保留的其他对象或导致其他远距离编程错误(这可能很难追踪)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多