使用 read.csv() 读取逗号分隔的字符串
reading comma-separated strings with 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
由于Smith, John
中的','
,d2
没有正确赋值。我如何读取文件以使 d2
看起来与 d
完全一样?
谢谢。
1) read.pattern read.pattern
(在gsubfn包中)可以读取这样的文件:
library(gsubfn)
pat <- "(.*),(.*)"
read.pattern("test.csv", pattern = pat, header = TRUE, as.is = TRUE)
给予:
name age
1 John Smith 34
2 Smith, John 34
2) 两遍 另一种可能是读进去,修好再重新读。这不使用包并提供相同的输出。
L <- readLines("test.csv")
read.table(text = sub("(.*),", "\1|", L), header = TRUE, sep = "|", as.is = TRUE)
注意:对于第三个字段在末尾的 3 个字段,请使用 (1)
pat <- "(.*),([^,]+),([^,]+)"
同样的情况在(2)中使用这个假设最后两个逗号中的每一个都有非space并且至少有一个space与文本中的任何逗号相邻字段并且该字段至少有 2 个字符:
text = gsub("(\S),(\S)", "\1|\2", L)
如果您有其他安排,只需适当修改 (1) 中的正则表达式和 (2) 中的 sub
或 gsub
。
我正在尝试加载一个以逗号分隔的数据文件,该文件的其中一个文本列中也有逗号。下面的示例代码生成这样一个文件'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
由于Smith, John
中的','
,d2
没有正确赋值。我如何读取文件以使 d2
看起来与 d
完全一样?
谢谢。
1) read.pattern read.pattern
(在gsubfn包中)可以读取这样的文件:
library(gsubfn)
pat <- "(.*),(.*)"
read.pattern("test.csv", pattern = pat, header = TRUE, as.is = TRUE)
给予:
name age
1 John Smith 34
2 Smith, John 34
2) 两遍 另一种可能是读进去,修好再重新读。这不使用包并提供相同的输出。
L <- readLines("test.csv")
read.table(text = sub("(.*),", "\1|", L), header = TRUE, sep = "|", as.is = TRUE)
注意:对于第三个字段在末尾的 3 个字段,请使用 (1)
pat <- "(.*),([^,]+),([^,]+)"
同样的情况在(2)中使用这个假设最后两个逗号中的每一个都有非space并且至少有一个space与文本中的任何逗号相邻字段并且该字段至少有 2 个字符:
text = gsub("(\S),(\S)", "\1|\2", L)
如果您有其他安排,只需适当修改 (1) 中的正则表达式和 (2) 中的 sub
或 gsub
。