【问题标题】:Merging only parts of csv file and add a coloumn with the csv file name仅合并部分 csv 文件并添加具有 csv 文件名的列
【发布时间】:2018-08-31 03:31:08
【问题描述】:

我想合并存储在工作目录及其子文件夹中的 cvs 文件。 这段代码运行流畅:

csv_files <- dir(pattern='.*[.]csv', recursive = T)
list.files()

my_data_frame <- do.call(rbind,lapply(csv_files,read.csv))`

到目前为止一切顺利。 我现在想添加一个包含这些 csv 文件名称的列。 此外,我只想提取这些 cvs 文件的一部分,比如从第 5 行到第 10 行。

感谢您的宝贵帮助!

【问题讨论】:

  • 不是 cvs - csv 文件
  • 我已经尝试过可能重复的解决方案。它们很容易不适合我的具体问题。
  • 如果您很难理解其他问题的解决方案,另一种选择是使用dplyr::bind_rows() 而不是rbind 并将lapply() 包装在setNames() 中以创建一个命名列表。随后可以通过dplyr::group_by()slice() 拉出第 5-10 行。

标签: r csv merge


【解决方案1】:

您可以简单地将 lapply 调用中的 read.csv 替换为您自己的函数,该函数执行子集并添加新列。例如,

csv_files <- dir(pattern='.*[.]csv', recursive = T)
list.files()

#function to make df from each csv 
my_read_csv <- function(x) {
  dfx <- read.csv(x)[5:10,] #or any other subset
  dfx$fname <- basename(x) #add new column
  return(dfx)
}

my_data_frame <- do.call(rbind,lapply(csv_files,my_read_csv))

【讨论】:

  • 函数可以是单行:transform(read.csv(x)[5:10,], fname = basename(x)).
猜你喜欢
  • 1970-01-01
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-14
  • 1970-01-01
  • 2019-07-13
  • 2019-11-06
相关资源
最近更新 更多