将多个数据框导出为 .csv 文件

3
我想使用循环将多个数据框导出为单独的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)
}

很明显我错了,但是我不知道该如何做。

3个回答

4

迭代数据框名称。 假设所有名称都以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)
  }
}

这个完美地运行了。不幸的是,数据框的名称没有像在我的样本中那样遵循一个模式,但我用数据框名称的简单列表替换了它。出于好奇,有没有一种快速生成全局环境中所有数据框名称列表的方法? - StephenB
1
代码已经拒绝了任何不代表数据框的名称,因此如果您想要工作区中的所有数据框,则可以使用 nms <- ls()names(Filter(isTRUE, eapply(.GlobalEnv, is.data.frame))) 将给出所有数据框的名称,但您实际上并不需要它。 - G. Grothendieck

0

数据

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)
}

0
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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接