【问题标题】:How to ignore comma in values while reading csv files in R?在 R 中读取 csv 文件时如何忽略值中的逗号?
【发布时间】:2019-04-01 14:15:02
【问题描述】:

我正在从包含一堆 csv 文件的文件夹中读取 R 中的 csv 文件。我只需要读取文件名包含特定字符串(“冗余”)的选定文件。在某些所需文件中,列(“ROLE”)值之一包含逗号。我需要忽略这些逗号。我该怎么做?

例如:一些所需文件的值如下:

User,ROLE,Rule ID<br/>
amit,[oi.freetier.developer, gse.automationengineer],R12345

当我执行以下代码时:

files <- list.files(pattern='.*REDUNDANT(.*).csv$')

tbl <- sapply(files, read_csv, col_types = cols(.default = "c"), quote = "[]", simplify=FALSE) %>% 
  bind_rows(.id = "id") %>% select(id, `User Login`, `Rule ID`) %>% distinct()

我得到如下结果:

   id                               `User` `Rule`              
   <chr>                            <chr>        <chr>                  
 1 Users.csv_REDUNDANT_amit.csv   amit       gse.automationengineer]

【问题讨论】:

  • 从您的第二个示例行中,您似乎希望逗号同时充当分隔符 有时也不是那样,而是作为纯文本。对此没有简单的解决方案,通常您必须编写一个解析器。
  • 谢谢蒂姆。有什么线索吗?
  • readr::read_csv 应该能够解析这个,如果逗号值在双引号内,它们应该是,如果 csv 格式正确。
  • 按原样阅读paste第二列和第三列?
  • 感谢 Julian,但遗憾的是逗号值不在双引号中。

标签: r csv tidyverse


【解决方案1】:

您可以先将文件作为原始文本读取,以便将括号替换为引号,然后将其读取为 csv:

tbl <- sapply(files, function(f) {
           gsub('\\[|\\]', '"', readLines(f)) %>%
               read.csv(text = ., check.names = FALSE)
       }) %>% 
       bind_rows(.id = "id") %>%
       select(id, User, `Rule ID`) %>%
       distinct()

【讨论】:

  • 两个注意事项:1)必须在read.csv中设置check.names = FALSE; 2)第一列只是User,没有Login。通过这些更正,您的代码可以正常工作。而且,gsub('\\\[|\\\]', '"', readLines(f)) 更简单。
  • 感谢布劳恩和瑞。 @RuiBarradas 不幸的是,我无法将您的建议放在代码中。你能帮上忙吗?
  • @RuiBarradas 抱歉,但代码对我不起作用。 :(
  • 我得到的错误是:“bind_rows_(x, .id) 中的错误:参数 1 必须有名称”
猜你喜欢
  • 2022-06-13
  • 1970-01-01
  • 2019-11-30
  • 1970-01-01
  • 2019-06-28
  • 1970-01-01
  • 2018-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多