Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.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
使用read.csv()读取逗号分隔的字符串_R_Read.csv - Fatal编程技术网

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

使用read.csv()读取逗号分隔的字符串,r,read.csv,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',
,我将使用
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
>d
姓名年龄
1约翰·史密斯34
2史密斯,约翰34
>write.csv(d,file=“test.csv”,quote=F,row.names=F)
>d2
姓名年龄
约翰·史密斯34岁
史密斯约翰34
由于John Smith中的
,“
d2
分配不正确。如何读取文件,使
d2
看起来与
d
完全相同

谢谢。

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

library(gsubfn)

pat <- "(.*),(.*)"
read.pattern("test.csv", pattern = pat, header = TRUE, as.is = TRUE)
2)两遍另一种可能是读入,修复,然后重读。这不使用包,并提供相同的输出

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

如果您有其他安排,只需适当地修改(1)中的正则表达式和(2)中的
sub
gsub

问题是您编写文件时使用了
quote=F
。把它拿走就行了。谢谢,但我的问题是文件是按原样发给我的。我使用此示例代码创建了这样一个文件。@Manojit您需要转义文件中的CSV条目,因为您的一些数据本身有逗号。如果没有引号,
read.csv
将在第二行看到:
Smith,John,34
。。。i、 e.它将看到三列。@Manojit这只是一列有逗号,还是有多列有此问题。@TimBiegeleisen谢谢。不幸的是,正如我之前所解释的,我并没有自己编写该文件,而是按原样发送给我的(
write.csv()
位用于生成一个示例文件来说明我的问题)。我想使用
read.csv()
read.table(),
我可能需要使用Excel之类的工具来编辑它。谢谢!这解决了
test.csv的问题。
My actual file在文本列之前有另一个数字列。我应该如何调整该文件的
read.table()
语法?已将注释移至答案末尾的注释中。谢谢<代码>pat Ok-在我输入上一条评论时,您已经回答了。再次感谢!在
read.pattern
read.table
中使用
quote=”“
禁用引号。
L <- readLines("test.csv")
read.table(text = sub("(.*),", "\\1|", L), header = TRUE, sep = "|", as.is = TRUE)
pat <- "(.*),([^,]+),([^,]+)"
text = gsub("(\\S),(\\S)", "\\1|\\2", L)