【问题标题】:How to read and merge data from multiple CSVs in a folder based on specific column names in R program如何根据R程序中的特定列名从文件夹中的多个CSV读取和合并数据
【发布时间】:2020-10-19 13:10:42
【问题描述】:

我有 30 个 CSV(包含大量数据),在一个文件夹中包含 92 个带有标题的列。我只需要使用 r 程序将所有 CSV 中某些特定 10 列的数据合并到一个 df 中。让我们说列名称为Col1,Col2,Col3, COl4....Col10。下面是我的示例代码,它结合了所有 CSV,与列名无关。

mypath <-"C:/Blrt/B0/Mac/Output/"
setwd(mypath)
filelist <- list.files(path=mypath, pattern="*.csv", full.names=FALSE)
filelist
Almdat <- Reduce(rbind, lapply(filelist, read.csv,header=TRUE, quote = "",sep = ",",row.names = NULL))

请在此提供任何支持。

【问题讨论】:

    标签: r csv merge


    【解决方案1】:

    你可以试试:

    cols <- paste0('Col', 1:10)
    Almdat <- do.call(rbind, lapply(filelist, function(x) 
                      read.csv(x, quote = "",row.names = NULL)[cols]))
    

    或者使用tidyverse函数:

    Almdat <- purrr::map_df(filelist, ~read.csv(.x, quote = "",row.names = NULL) %>% 
                                       dplyr::select(cols))
    

    【讨论】:

    • 您好 Ronak,我有列名称,例如 Date、Almid、history、Summary。你能告诉我如何添加这些是 Cols,因为我收到错误为“未定义的列已选择”
    • @Rajhesh 在cols 中,您需要包含所有要选择的列。类似cols &lt;- c('Date', 'Almid', 'history')
    • Thansk Ronak,但是在使用上面的 purr::map_df 代码时,似乎有错误为“read.table 中的错误(file = file, header = header, sep = sep, quote = quote , : 未找到对象‘x’”
    • @Rajhesh 抱歉,应该是 .x。我已经更新了答案。你现在可以检查一下吗?
    • 某处我错过了这部分。它对我不起作用。无论如何感谢您的支持
    【解决方案2】:

    您可以尝试使用 tidyverse 中的 purrr 和 readr 的组合。来自 readr 的 read_csv 允许您指定 col_types 并包含函数 cols_only ,该函数允许您指定要加载的列以及要加载的类型(下面的示例使用 col_guess() 但如果您愿意,可以更具体) .

    purrr 包中的map_dfr 替换了lapply、Reduce 和rbind。结果是一个 tibble 组合了所有加载的数据帧的行。

    library(tidyverse)
    
    filelist <- list.files(path = "C:/Blrt/B0/Mac/Output/", pattern = ".csv", full.names = TRUE)
    
    Almdat <- map_dfr(filelist, 
                      read_csv,
                      col_types = cols_only(Col1 = col_guess(),
                                            Col2 = col_guess(),
                                            Col3 = col_guess())
    

    上面的例子只使用了三列,你可以在 cols_only() 中添加任意多的列。

    【讨论】:

    • 嗨,Rory,我在执行代码时收到 Delimiter 或引号的警告。另外,我可以看到观察的数量更少。有什么好的调整吗?
    • 嗨@Rajhesh。这很奇怪。你能发布你收到的确切警告吗?关于观察数问题,如果将参数skip_empty_rows设置为FALSE,结果是否有预期的行数?
    • 嗨@罗里。似乎那些应该是异常值/空行。谢谢。你的代码对我有用。
    猜你喜欢
    • 2013-07-05
    • 2022-11-02
    • 2021-04-28
    • 2020-08-28
    • 2022-09-23
    • 2016-06-09
    • 1970-01-01
    • 2021-05-12
    • 2016-07-02
    相关资源
    最近更新 更多