用read.csv()读取逗号分隔的字符串

Man*_*jit 4 r read.csv

我正在尝试加载逗号分隔的数据文件,该文件在其一个文本列中也有逗号.以下示例代码生成这样一个文件'test.csv',,我将加载它read.csv()来说明我的问题.

> d <- data.frame(name = c("John Smith", "Smith, John"), age = c(34, 34))
> d
         name age
1  John Smith  34
2 Smith, John  34
> write.csv(d, file = "test.csv", quote = F, row.names = F)
> d2 <- read.csv("test.csv")
> d2
            name age
John Smith    34  NA
Smith       John  34
Run Code Online (Sandbox Code Playgroud)

由于','in Smith, John,d2未正确分配.如何阅读文件以使其d2看起来完全一样d

谢谢.

G. *_*eck 5

1)read.pattern read.pattern(在gsubfn包中)可以读取这样的文件:

library(gsubfn)

pat <- "(.*),(.*)"
read.pattern("test.csv", pattern = pat, header = TRUE, as.is = TRUE)
Run Code Online (Sandbox Code Playgroud)

赠送:

         name age
1  John Smith  34
2 Smith, John  34
Run Code Online (Sandbox Code Playgroud)

2)两次通过 另一种可能性是读取它,修复它然后重新读取它.这不使用包并提供相同的输出.

L <- readLines("test.csv")
read.table(text = sub("(.*),", "\\1|", L), header = TRUE, sep = "|", as.is = TRUE)
Run Code Online (Sandbox Code Playgroud)

注意:对于3个结尾的第三个字段的字段,请在(1)中使用

pat <- "(.*),([^,]+),([^,]+)"
Run Code Online (Sandbox Code Playgroud)

同样的情况在(2)中使用它,假设在最后两个逗号中的每一个旁边都有非空格,并且文本字段中的任何逗号旁边至少有一个空格,并且这些字段至少有2个字符:

text = gsub("(\\S),(\\S)", "\\1|\\2", L)
Run Code Online (Sandbox Code Playgroud)

如果你有其他一些安排,只需适当修改(1)中的正则表达式和(2)中的subgsub.