【问题标题】:Importing and binding multiple and specific csv files into R将多个特定的csv文件导入并绑定到R中
【发布时间】:2016-06-22 10:52:18
【问题描述】:

我想在一个 R 文件中导入并绑定名为“number.CSV”的特定 csv 文件(例如 3437.CSV),这些文件与我不想要的其他 csv 文件放在一个文件夹中导入。

我怎样才能只选择我感兴趣的那些?

我有一份我需要的所有 csv 文件的列表,下面的列中有一些。

CODE
49002
47001
64002
84008
46003
45001
55008
79005
84014
84009
45003
45005
51001
55012
67005
19004
7003
55023
55003
76004
21013

我有 364 个 csv 文件要读取和绑定。

n.b.我无法从文件夹中选择所有“***.csv”文件,因为我还有其他不需要的文件。

谢谢

【问题讨论】:

  • 您的文件是否有任何类型的模式或命名约定来区分您需要和不需要的文件?
  • 嗨本杰明,很遗憾没有。它们都被命名为 numbers.csv

标签: r csv import bind


【解决方案1】:

您可以遍历感兴趣的 CSV 文件列表,读取每个文件,并将其绑定到一个通用数据框:

path <- "path/to/folder/"
ROOT <- c("49002", "47001", "21013")
files <- paste0(path, ROOT)
sapply(files, bindFile, var2=all_files_df)

bindFile <- function(x, all_df) {
    df <- read.csv(x)
    all_df <- rbind(df, all_df)
}

【讨论】:

  • 嗨蒂姆,我想运行你的代码,但我得到了这个:> sapply(files, bindFile, var2=all_files_df) FUN(X[[i]], ...) 中的错误:对象'all_files_df' 未找到
  • @Paolo all_files_df 需要您自己定义。它是您要聚合所有内容的数据框。所有 CSV 文件的结构是否完全相同?
  • 它们具有相同的列,但观察的数量发生了变化。我重新运行代码,我得到: read.table 中的错误(file = file,header = header,sep = sep,quote = quote,:比列名更多的列调用:read.table(file = file,header = header , sep = sep, quote = quote, dec = dec, fill = fill, comment.char = comment.char, ...)
【解决方案2】:

只需用你的数字代码命名文件名:

filenames = paste(code, 'csv', sep = '.')
# [1] "49002.csv" "47001.csv" "64002.csv" …

您可能还需要指定文件的完整路径:

directory = '/example/path'
filenames = file.path(directory, filenames)
# [1] "/example/path/49002.csv" "/example/path/47001.csv" "/example/path/64002.csv" …

现在您可以简单地将它们一次性读入 R:

data = lapply(filenames, read.csv)

或者,如果您的 CSV 文件没有列标题(尤其是当文件的行具有不同数量的项目时!)

data = lapply(filenames, read.csv, header = FALSE)

这将为您提供 listdata.frames。如果要将它们全部绑定到一个表中,请使用

data = do.call(rbind, data)

【讨论】:

  • 嗨,我试过你的代码,但是当我到达 lapply 时,我得到了:read.table 中的错误(file = file,header = header,sep = sep,quote = quote,:比列名更多的列
  • @Paolo 从对另一个答案的评论中,我看到您的文件实际上并不是 R 识别为有效 CSV 的格式,因为列数不同。这是一个问题,您通常应该避免生成此类 CSV 文件。软件不应该生成这样的 CSV。也就是说,您可以通过添加参数header = FALSE 使 R 导入文件。查看更新的答案。
【解决方案3】:

我不知道您是否可以通过 .CSV 文件执行此操作。您可以做的是打开所有数据,然后使用命令cbind

例如:

data1 <- read.table("~/YOUR/DATA", quote="\"", comment.char="")
data2 <- read.table("~/YOUR/DATA", quote="\"", comment.char="")
data3 <- read.table("~/YOUR/DATA", quote="\"", comment.char="")

然后:

df

其中col 是您想要的列的名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-24
    • 2014-07-22
    • 2018-11-22
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    • 2015-03-03
    相关资源
    最近更新 更多