【问题标题】:Add Id column and populate with CSV name in R forloop在 R for 循环中添加 Id 列并使用 CSV 名称填充
【发布时间】:2021-02-10 02:22:03
【问题描述】:

我有许多 CSV,我想在其中创建一个 Id 列并使用 CSV 的名称填充该 Id 列。

这是当前 B1.csv 的示例:

 Date_Time         Temp
5/5/2020 11:00       89
5/5/2020 11:30       97
5/5/2020 12:00       108

我想看看:

 Id         Date_Time         Temp
 B1      5/5/2020 11:00       89
 B1      5/5/2020 11:30       97
 B1      5/5/2020 12:00       108

代码:

temp = list.files("C:\\Users\\kujld016\\**\\r", 
                  pattern = "*.csv", full.name=T)
myfiles = lapply(temp, read.csv)



for( i in seq_along(myfiles)){
  
  myfiles[[i]]$Id<-NOT sure what to do here
  write.csv(myfiles[[i]], paste0("C:\\Users\\***\\out\\",myfiles[[i]][1,1],'.csv'), row.names=F)
}

*我不确定如何创建可重现的示例。我已经包括了我能想到的上面可能需要的所有内容。谢谢

【问题讨论】:

  • myfiles[[i]]$Id &lt;- temp[i]?或者,如果需要,可以使用一点正则表达式从完整文件路径中提取文件名(如果包含在 temp 中)
  • 这成功了!但包括整个文件路径。我需要在该文件路径中指定 CSV 名称,然后将其删除。谢谢
  • 您可以删除路径中最后一个 / 之前的所有内容 - file_name = sub(".*/", "", temp),然后使用 file_name[i]
  • 我能够使用 substr(temp[i], 75,77) 更接近我所需要的。但是,我的 CSV 是数字 B1 - B100,因此子字符串规范因数字而异。
  • 如果您发布一些文件路径示例,那么我可以更有效地提供帮助。另一种选择是使用新的list.files 调用来补充您拥有的调用,也许是file_names = list.files("C:\\Users\\kujld016\\**\\r", pattern = "*.csv", full.name = FALSE)

标签: r loops csv


【解决方案1】:

更新

library(readr)
library(dplyr)

infolder  <- "C:\\Users\\***\\r"
outfolder <- "C:\\Users\\***\\out"

setwd(infolder)

csvfiles <- dir(path = infolder, pattern = "\\.csv$")

for (i in csvfiles) {
  #tmpfile <- read_csv(i)
  #tmpfile$filename <- i
  #write_csv(tmpfile, file.path(outfolder, i)
  print(file.path(outfolder, i))
}

【讨论】:

  • M. Viking,目前我想将所有 CSV 分开。只要弄清楚 Id 列,代码的“write.csv”部分就可以满足我的需要。
  • 您要覆盖原始文件.. 还是将它们放在单独的文件夹中.. 或更改名称,filename.csv -> filename_mod.csv...
  • 我将 write.csv 路径设置为将 csv 文件放在一个空文件夹中,这样原件就不会被更改。
  • csvfiles 似乎填充了每个 CSV,但是当我运行循环时,我收到一个错误,指出没有这样的文件或目录。
  • 我认为问题在于我在工作目录之外提取和保存文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-09-29
  • 2017-05-13
  • 2021-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-12
相关资源
最近更新 更多