【问题标题】:Saving CSV files inside a for-loop [duplicate]在for循环中保存CSV文件[重复]
【发布时间】:2019-09-25 15:40:22
【问题描述】:

我正在尝试在一个函数上使用 for 循环,该函数获取循环读取的数据文件,对其进行修改,并将结果保存为 CSV 文件,但不知道如何应用循环所以每个结果都将保存为单独的 CSV 文件。

以下是我的数据框示例:

df1 <- data.frame("age" = c(1.5, 5.5, 10), "group" = rep("A", 3))
df2 <- data.frame("age" = c(1, 5.5, 9, 15), "group" = rep("B", 4))
dffiles <- list(df1, df2)

现在我的代码如下所示:

addone <- function(id,df){
new <- df[,1]+1
df$index <- id
name <- paste0("df",i)
assign(name, df)
write.csv(new, paste0("added", id, ".csv"))
}

for (i in 1:2){
  dffile <- dffiles[[i]]
  addone(i, dffile)
}

所以for 循环正在读取每个原始文件,理想情况下每个原始文件都会获得一个新的index 列并保存为CSV 文件。我的循环似乎有问题,因为当我在函数中运行单独的行时我会得到正确的文件,但循环的输出不包括 index 列。谁能指出我搞砸了循环中的哪一部分?

【问题讨论】:

  • 我想这个问题之前已经回答过了:stackoverflow.com/questions/26707724/…
  • 感谢您将我引导至上述帖子!我想我了解如何为循环中的每个数据帧创建空数据帧以进行填充,但现在我在正确保存修改后的数据帧方面遇到了不同的问题(我编辑了问题)。
  • 这些代码行:name &lt;- paste0("df",i); assign(name, df) 没有按预期工作,因此是不必要的。数据框 df 是您想要的值,因此您只需要 write.csv(df, paste0("added", id, ".csv"))
  • @Dave2e 哦,你是对的,我什至没有意识到,感谢您指出这一点!

标签: r for-loop


【解决方案1】:

您需要创建一个新的文件名,然后在 write.csv 函数中使用新创建的名称。

这样的事情应该可以工作:

#function takes an ID and creates the file name
func <- function(id, df) {
  new <- df[,1]+1
  write.csv(new, paste0("new", id, ".csv"))
} 


#the call to the function passes the identifier.
dffiles <- list(df1, df2)
for (i in 1:2){
  dffile <- dffiles[[i]]
  func(i, dffile)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 2018-01-21
    • 1970-01-01
    • 2014-05-16
    • 2018-08-06
    • 1970-01-01
    • 2022-11-28
    相关资源
    最近更新 更多