【问题标题】:R 3.0.3 rbind multiple csv filesR 3.0.3 rbind 多个 csv 文件
【发布时间】:2014-06-03 21:06:37
【问题描述】:

R 3.0.3:我有 40 个 csv 文件,它们的结构都与我想将 rbind 相同的结构放入一个文件中,这样我就可以计算一列的平均值。

我搜索过:

  • 这个网站
  • R in a Nutshell
  • R_Intro 来源
  • ?rbind Help 在 RStudio 中

我找不到答案。

有什么建议/指点吗?

【问题讨论】:

    标签: r csv rbind


    【解决方案1】:

    使用此处的答案 [Importing several files and indexing them]

    列出带有 .csv 扩展名的文件 - 这假定您的工作目录中只有 .csv 文件是您要阅读的文件

    files  <- list.files(pattern = '\\.csv')
    

    将文件读入列表 - 有标题吗?

    tables <- lapply(files, read.csv, header = TRUE)
    

    rbind 文件

    combined.df <- do.call(rbind , tables)
    

    然后您可以找到 mean - 找出哪些列是数字

    s <- sapply(combined.df, is.numeric)
    

    求数值变量的平均值

    colMeans(combined.df[s])
    

    【讨论】:

    • .@user20650 - 感谢您的回答。如果在rbind() 之前,我想添加一个唯一标识符(例如 0、1、2 等数字),它可以帮助我区分哪些数据来自文件 1,哪些来自文件,那么我该如何实现呢?我目前正在尝试loop(),但它变得有点乱。
    • @ChetanArvindPatil ;在读入阶段,您可以使用tables &lt;- lapply(files, function(x) cbind(read.csv(x, header = TRUE), id=x)) 添加文件名,或者使用tables &lt;- lapply(seq_along(files), function(x) cbind(read.csv(files[x], header = TRUE), id=x)) 添加数字;或在列表中使用data.table,如上面的答案:names(tables) &lt;- files ; data.table::rbindlist(tables, idcol=TRUE)
    【解决方案2】:

    在更现代的 plyr 方法中:

    files <- list.files(...)
    data <- adply(files, 1, read.table)
    

    (星期六下午:未经测试的代码,但方法很好)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-22
      • 2017-07-26
      • 2020-09-23
      • 2012-04-29
      • 1970-01-01
      • 2021-09-22
      • 1970-01-01
      • 2016-06-14
      相关资源
      最近更新 更多