【问题标题】:Export multiple data frames into .csv files using R使用 R 将多个数据帧导出为 .csv 文件
【发布时间】:2020-04-07 16:44:37
【问题描述】:

我想通过循环将多个数据帧作为单独的 csv 文件导出到工作目录,而不是写出所有名称

##Sample data frame

employee <- c('John Doe','Peter Gynn','Jolie Hope')
salary <- c(21000, 23400, 26800)
startdate <- as.Date(c('2010-11-1','2008-3-25','2007-3-14'))
d30 <- data.frame(employee, salary, startdate)

##Creating a few of the same name for illustrative purposes
d39 <- data.frame(employee, salary, startdate)
d40 <- data.frame(employee, salary, startdate)

for (list in c(d30,d39)){
  write.csv(list, file="list.csv", row.names = FALSE)
}

显然我错了。但我不知道该怎么做。

【问题讨论】:

    标签: r loops


    【解决方案1】:

    遍历数据框名称。我们假设所有名称都以 d 开头并且长度为 3。如果不是,请修改模式或直接设置 nms 如果您知道它们。我们还会再次检查名称是否为数据框,但如果您确定没有不是数据框且名称与模式匹配的对象,则可以省略该检查。

    nms <- ls(pattern = "^d..$")
    for(nm in nms) {
      X <- get(nm)
      if (is.data.frame(X)) {
        filename <- paste0(nm, ".csv")
        message("writing out ", filename)
        write.csv(X, file = filename, row.names = FALSE)
      }
    }
    

    【讨论】:

    • 这非常有效。不幸的是,数据框名称不像我的示例中那样遵循模式,但我将其替换为数据框名称的简单列表。出于好奇,有没有一种快速的方法来生成全局环境中所有数据帧的名称列表?
    • 代码已经拒绝任何不代表数据框的名称,因此如果您希望工作区中的所有数据框 nms &lt;- ls() 可以工作。 names(Filter(isTRUE, eapply(.GlobalEnv, is.data.frame))) 会给出所有数据框的名称,但您并不真正需要它。
    【解决方案2】:
    i <- 1
    
    dfs <- list(d30, d39)
    
    for (df in dfs){
      filename <- paste0("list", " ", i, ".csv")
      write.csv(list, file=filename, row.names = FALSE)
      i <- i + 1
    }
    

    【讨论】:

      【解决方案3】:

      数据

      employee <- c('John Doe','Peter Gynn','Jolie Hope')
      salary <- c(21000, 23400, 26800)
      startdate <- as.Date(c('2010-11-1','2008-3-25','2007-3-14'))
      

      代码:

      # create a new environment
      myenv <- new.env()
      # create data frames inside the environment
      myenv$d30 <- data.frame(employee, salary, startdate)
      myenv$d40 <- data.frame(employee, salary, startdate)
      
      # get data from environment and write to files.
      for (list in mget(ls(envir = myenv), envir = myenv)){
        write.csv(list, file="list.csv", row.names = FALSE)
      }
      

      【讨论】:

        猜你喜欢
        • 2014-12-29
        • 2021-10-14
        • 2021-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-04
        • 2018-02-19
        相关资源
        最近更新 更多