【问题标题】:Extract column from multiple csv files and merge into new data frame in R从多个 csv 文件中提取列并合并到 R 中的新数据框中
【发布时间】:2022-01-09 21:53:11
【问题描述】:

我想从名为 table3_2table3_3table3_4table3_5...、table3_168 的 168 个不同 .csv 文件中提取名为 X1 的列,所有这些文件都保存在一个文件夹中 (文件夹 1)。然后,合并成一个新的df。列的内容是因子。

尝试此代码但无法正常工作。

folder1 <- "folder1"
folder2 <- "folder2" # destination folder

write_to <- function(file.name) {
file.name <- paste0(tools::file_path_sans_ext(basename(file.name)), ".csv")
df <- read.csv(paste(folder1, file.name, sep = "/"), header = FALSE, sep = "/")[X1]
write.csv(df, file = past(folder2, file.name, sep= "/"))
}

files <- list.files(path = folder1, pattern = "*.csv")

lapply(X = paste(folder1, files, sep= "/"), write_to)

这会出现错误:

文件中的错误(文件,“rt”):无法打开连接 另外:警告信息: 在文件(文件,“rt”)中: 不能经常归档folder1/folder1.csv:没有这样的文件或目录

所以,我没有调用正确的表格名称,也可能没有将 R 指向正确的文件夹(我已将 wd 设置为文件夹 1)。

任何建议将不胜感激。

非常感谢

【问题讨论】:

  • 您说您将 wd 设置为 folder1。 R 然后找不到 folder1 了,因为你已经在里面了。如果 folder1 和 folder2 都具有相同的父文件夹,那么您应该将 wd 设置为那个。否则,您可以尝试使用它们的绝对路径。
  • 谢谢,知道了真的很有帮助

标签: r csv


【解决方案1】:

有一些小问题很突出,例如您在file = past(folder2, file.name, sep= "/") 中有错字(应该是paste() 而不是past()),但也许更简单的方法会适合,例如使用vroom:

library(vroom)

files <- fs::dir_ls(glob = "table3_*csv")
data <- vroom(files, id = "ID", col_select = c(ID, X1))
data

vroom_write(data, file = "~/xx/folder2/new_df.csv")
# replace "xx" with your path

这种方法能解决您的问题吗?

【讨论】:

  • 嗨,非常感谢。看起来第一部分正在运行,但我遇到了 vroom_write 行的错误注释。 vroom_write(data, file = "~/P:/Project3/Analysis/folder1?new_df.csv") 给出错误 Error in vroom_write data,...未使用的参数 (file = "~P..) 你知道我在做什么吗?文件路径有问题吗?我在这里将 Analysis 设置为 wd?
  • 对不起,我设置的文件路径是“~/P:/Project3/Analysis/folder1/new_df.csv”
  • 这在我看来是一条完整的路径,所以请尝试在开头去掉波浪号(即file = "P:/Project3/Analysis/folder1/new_df.csv"
猜你喜欢
  • 1970-01-01
  • 2017-07-11
  • 1970-01-01
  • 2021-12-10
  • 2019-06-02
  • 1970-01-01
  • 2011-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多