首页 > 解决方案 > 在r中将列表项输出到csv时设置正确的列名

问题描述

给定一个列表(例如输出),我想将每个项目写入一个单独的 csv 文件以在其他地方使用。该列表很大并且包含很多项目,因此我想使用 for 循环进行快捷方式。我创建了以下内容,以根据数据组和日期为每个输出文件建立一个名称。当我运行它时,一切正常,除了它使用列表项名称和现有的列名重命名列(例如,而不是'week4',我得到'pygweek4'。我不希望它改变我的列名。

我尝试设置 col.names = TRUE,希望保留现有名称,并使用下面的代码指定名称,以及设置 col.names = FALSE。在所有情况下,我都会收到一条警告消息,说“尝试设置'col.names'被忽略”。

谁能建议一种简单的方法来保留我已经拥有的列名?

out <- list(pyg = structure(list(week4 = c("0", "1", "1", "0", "1"), 
      week5 = c("0", "1", "1", "1", "1"), week6 = c("0", "1", "0", "1", "1"), 
      week7 = c("0", "0", "0", "1", "1"), week8 = c("0", "1", "0", "1", "1")), 
      row.names = 281:285, class = "data.frame"), 
      saw = structure(list(week4 = c("0", "0", "0", "0", "0"), 
      week5 = c("0", "0", "0", "0", "0"), week6 = c("0", "0", "0", "0", "0"), 
      week7 = c("0", "0", "0", "0", "0"), week8 = c("0", "0", "0", "0", "1")), 
      row.names = c(NA, 5L), class = "data.frame")) 

 for(i in 1:length(out)){
  n = paste(paste(names(out)[i],Sys.Date(), sep = "_"),  ".csv", sep = "")  # create set name and version control
  write.csv(out[i], file = n, row.names = FALSE, col.names = c("week4", "week5", "week6", "week7", "week8"))
}

抱歉没有合适的标签...我没有设置我认为对这篇文章有用的标签的声誉,也找不到在可用标签中有意义的标签。

标签: routput

解决方案


我们不需要指定col.names. 问题似乎是,list元素没有正确提取。它应该[[i]]代替[i]. ,[i]它仍然是list一个data.frame元素。通过这样做[[i]],它data.framelist

for(i in seq_along(out)){
   n <- paste(paste(names(out)[i],Sys.Date(), sep = "_"),  
                     ".csv", sep = "")  
    write.csv(out[[i]], file = n, row.names = FALSE, quote = FALSE)
   }

可以通过检查发现差异str

str(out[[1]])
str(out[1])    

推荐阅读