【问题标题】:issue merging multiple csv files into a single dataframe in R问题将多个csv文件合并到R中的单个数据框中
【发布时间】:2019-06-02 03:46:33
【问题描述】:

我已经看到了很多答案,但是当我尝试它们时,我的数据框是空的 - “尝试将属性设置为 NULL”

setwd("*my path*")
library(ggplot2)
library(class)
set.seed(3060)

label<-11
index<-000

for(label in 11:37)
{
  for(index in 000:419){

    nameOfFile <- paste(label, index, "features.csv", sep = "_")

    files <- list.files(path=getwd(), pattern=nameOfFile)

    training <- do.call(rbind, lapply(files, read.csv, header=FALSE))


  }    
}

我所有的 csv 文件都是相同的格式 - 一行 22 列。

【问题讨论】:

  • 如果没有可重现的示例,很难在这里给您提示。首先,尝试是否可以读取单个文件:tmp &lt;- read.csv(nameOfFile)。如果可行,那么您可以将它们存储在一个列表中,然后在循环外与 do.call 合并。
  • 或者看看rio
  • 您的脚本应该会找到名为11_000_features 等的文件,但如果它们有后缀(例如.csv),它不一定会找到它们。 pattern 参数应该是一个正则表达式,所以如果你的文件名有后缀,可能在你的paste 语句中包含"\\.csv"".*"
  • 感谢@AndrewGustar - 它不再为空,但现在只存储其中一个文件?
  • @user10739557 那是因为你在每次循环时都会覆盖files。也许您希望 files 成为一个列表,并使用循环将结果附加到它?或者你可以完全忘记循环,只使用pattern="\\d+_\\d+_features\\.*" 来捕获所有具有 XX_YY_features 模式的文件名。

标签: r csv merge null rbind


【解决方案1】:

可能需要稍微弄乱这段代码,但您不需要循环读取文件。

library(tidyverse)

do.call(bind_rows,
        lapply(paste0("data_location/", list.files("data_location/")), read_csv))

【讨论】:

  • 谢谢,但这仍然只存储其中一个文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-30
  • 2021-12-10
  • 2023-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多