Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中读取csv文件时,如何忽略值中的逗号?_R_Csv_Tidyverse - Fatal编程技术网

在R中读取csv文件时,如何忽略值中的逗号?

在R中读取csv文件时,如何忽略值中的逗号?,r,csv,tidyverse,R,Csv,Tidyverse,我正在从一个有很多csv文件的文件夹中读取R中的csv文件。我只需要读取文件名包含特定字符串(“冗余”)的选定文件。在某些所需文件中,其中一个列(“角色”)值包含逗号。我需要忽略这些逗号。我该怎么做 例如:某些所需文件的值如下: User,ROLE,Rule ID<br/> amit,[oi.freetier.developer, gse.automationengineer],R12345 用户、角色、规则ID amit,[oi.freetier.developer,gse.au

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

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

User,ROLE,Rule ID<br/>
amit,[oi.freetier.developer, gse.automationengineer],R12345
用户、角色、规则ID
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()
文件%select(id,`User Login`,`Rule id`)%>%distinct()
我得到的结果如下:

id`User``规则`
1 Users.csv_REDUNDANT_amit.csv amit gse.automationengineer]

您可以先将文件作为原始文本读取,以便用引号替换括号,然后将其作为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()
tbl%
read.csv(text=,check.names=FALSE)
}) %>% 
绑定行(.id=“id”)%>%
选择(id,用户,`规则id`)%>%
不同的()

在第二个示例行中,看起来您希望逗号既作为分隔符,有时也不作为分隔符,而是作为纯文本。对于这个问题没有简单的解决方案,一般来说,您必须编写一个解析器。谢谢Tim。任何线索?
readr::read_csv
都应该能够解析这个,如果逗号值在双引号内,它们应该是双引号,如果csv格式正确。按原样读取,则粘贴第2列和第3列?谢谢Julian,但不幸的是逗号值没有双引号。注意:1)必须在
Read.csv
中设置
check.names=FALSE
;2) 第一列只是
用户
,没有
登录
。通过这些更正,您的代码可以正常工作。而且,
gsub('\\[\\\\]',“”,readLines(f))
更简单。谢谢Braun和Rui。@Ruibaradas很遗憾,我无法将您的建议放在代码中。您能帮忙吗?@Ruibaradas抱歉,代码对我不起作用。:(我得到的错误是:“绑定行中的错误(x,.id):参数1必须有名称)
tbl <- sapply(files, function(f) {
           gsub('\\[|\\]', '"', readLines(f)) %>%
               read.csv(text = ., check.names = FALSE)
       }) %>% 
       bind_rows(.id = "id") %>%
       select(id, User, `Rule ID`) %>%
       distinct()