【问题标题】:Importing multiple .csv files with variable column types into R将具有可变列类型的多个 .csv 文件导入 R
【发布时间】:2017-03-31 02:58:01
【问题描述】:

如何正确构建一个 lapply 来读取(从一个目录中)所有 .csv 文件,将所有列作为字符串加载,然后将它们绑定到一个数据框中。

根据this,我有办法将所有 .csv 文件加载并绑定到数据框中。不幸的是,他们对列的类型转换方式的可变性感到困惑。因此给了我这个错误:

错误:无法自动将字符转换为整数 专栏

我尝试用arguments for data type 来补充代码,并试图将所有内容都保留为字符;我现在被困在能够正确地让我的 lapply“循环”有效地引用其“循环”的每个循环的主题上。

srvy1 <- structure(list(RESPONSE_ID = 584580L, QUESTION_ID = 328L, SURVEY_ID = 2324L, 
           AFF_ID_INV_RESP = 5L), .Names = c("RESPONSE_ID", "QUESTION_ID", 
                                             "SURVEY_ID", "AFF_ID_INV_RESP"), class = "data.frame", row.names = c(NA, 
                                                                                                                  -1L))

srvy2 <- structure(list(RESPONSE_ID = 584580L, QUESTION_ID = 328L, SURVEY_ID = 2324L, 
           AFF_ID_INV_RESP = "bovine"), .Names = c("RESPONSE_ID", "QUESTION_ID", 
                                                   "SURVEY_ID", "AFF_ID_INV_RESP"), class = "data.frame", row.names = c(NA, 
                                                                                                                        -1L))    

files = list.files(pattern="*.csv")
tbl = lapply(files, read_csv(files, col_types = cols(.default = col_character()))) %>% bind_rows

我可以在 tidyverse 中保留一个简单的解决方法吗,或者我必须降低一个级别并自己公开构建 for 循环 - 每个 this

【问题讨论】:

  • 反对票到底是为了什么?
  • 很可能是因为没有提供可重现的示例,包括数据。您的代码中有一些错误。应该是lapply(fies, read_csv, col_types = cols(.default = col_character()))
  • 我将提供两个文件中的head(x,5),从这些文件中创建一个列表,然后将结果dput 粘贴到此处。
  • tbl = lapply(files, read_csv(col_types = cols(.default = col_character()))) 得到以下错误 Error in inherits(x, "connection") : 参数“file”丢失,没有默认值 而这个tbl = lapply(files, read_csv(files, col_types = cols(.default = col_character()))) 得到这个开关错误(tools::file_ext(path), gz = gzfile(path, ""), bz2 = bzfile(path, : EXPR 必须是长度为 1 的向量另外:警告消息:1:在 if ( grepl("\n", x)) { : 条件长度 > 1 并且只使用第一个元素 这通常意味着我需要按行调用。
  • lapply 应该是 lapply(x, FUN, ...) 的形式,其中 ... 是传递给 FUN 的参数。您正在填充 FUN 中的参数。应该是lapply(files, read_csv, col_types = cols(.default = col_character()))

标签: r dplyr tidyverse


【解决方案1】:

lapply 应该是lapply(x, FUN, ...) 的形式,其中... 是传递给FUN 的参数。您正在填充 FUN 中的参数。应该是lapply(files, read_csv, col_types = cols(.default = "c"))

如果您喜欢tidyverse 解决方案:

files %>%
  map_df(~read_csv(.x, col_types = cols(.default = "c")))

这会将整个事物绑定到最后的数据框中。

【讨论】:

  • 谢谢。我已经为此苦苦挣扎了好几个小时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-23
  • 2018-11-22
  • 2017-04-21
  • 1970-01-01
  • 2012-03-04
  • 1970-01-01
  • 2013-11-09
相关资源
最近更新 更多