在R中读取csv文件时,如何忽略值中的逗号?
我正在从一个有很多csv文件的文件夹中读取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
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()