【问题标题】:Define one column only when reading in a list of csv files?仅在读取 csv 文件列表时定义一列?
【发布时间】:2021-03-01 22:50:17
【问题描述】:

我正在读取文件列表并将其合并为一个 df:

fi <- list.files(path = 'data', pattern = '*.csv', full.names = T) %>%  
  map_df(~read_csv(paste0(.)))

但这是一个错误:

错误:无法组合 App ID App ID 。 .

在有问题的目录中有许多文件需要读入和组合。我想知道是否可以在像这样阅读时为问题字段定义列类型App ID?例如。 map_df(~read_csv(paste0(.), cols(App ID = CHR))

【问题讨论】:

    标签: r readr


    【解决方案1】:

    我们可以使用

    library(dplyr)
    library(purrr)
     out <-  list.files(path = 'data', pattern = '*\\.csv',
        full.names = TRUE) %>%             
           map_df(~read_csv(.x) %>%
                mutate(across(everything(), as.character())) %>%
           type.convert(as.is = TRUE)
    

    【讨论】:

    • 嗨,我必须更新上面的错误消息,因为它使用了 字符,我不得不转义它们。这是各种 csv 之间发生冲突的数据类型。有任何想法吗? Error: Can't combine App ID` App ID .`
    • @user14328853 请检查更新
    • 您好,感谢您在这里尝试。感谢我从未提供过可重复的数据,但这不起作用。它无法通过 map_df() 步骤,因为这是引发错误的步骤。如果我能以某种方式告诉 R 在 read_csv 期间将字段 App ID 强制为 chr,那就可以了。但是阅读 ?read_csv 文档我看不到如何:/
    • @user14328853 为什么它不起作用。它将map 和绑定中的所有列转换为character。所以,它应该工作
    • 是的,它确实有效。从未意识到或想过在 map_df 函数本身中改变 df,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 2016-12-19
    • 1970-01-01
    相关资源
    最近更新 更多