R:从csv读取用引号括起来的数值

R:从csv读取用引号括起来的数值,r,csv,quotes,read.table,R,Csv,Quotes,Read.table,这可能是一个简单的问题,但我似乎无法理解 我有一个csv文件,所有条目都用引号括起来,还有数字值,比如说xy.csv: "y","z" "1.1","bla" "2.1","blubb" 到目前为止,我一直在使用 dat <- read.table("yz.csv",colClasses=rep("character",2), header=TRUE) dat$y <- as.numeric(dat$y) 我觉得是时候以更专业的方式来做这件事了,以防止以下情况发生 dat <

这可能是一个简单的问题,但我似乎无法理解

我有一个csv文件,所有条目都用引号括起来,还有数字值,比如说
xy.csv

"y","z"
"1.1","bla"
"2.1","blubb"
到目前为止,我一直在使用

dat <- read.table("yz.csv",colClasses=rep("character",2), header=TRUE)
dat$y <- as.numeric(dat$y)
我觉得是时候以更专业的方式来做这件事了,以防止以下情况发生

dat <- read.table("qz.csv",colClasses=rep("character",10), header=TRUE)
dat$q <- as.numeric(dat$a)
dat$r <- as.numeric(dat$b)
...
dat$y <- as.numeric(dat$y)

更新以显示最小的示例。。。我想不出来。我也尝试了
readr
软件包

a <- textConnection('"A", "B", "C"
                    "a", "1", "1"
                    "b", "2", "2"')
df <- read.csv(a, colClasses=c("character", "NULL", "numeric"), 
               col.names=c("AA", "BB", "CC"))
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
  scan() expected 'a real', got '"1"'

library("readr")
> df <- read_csv(a, col_types=c("c", "-", "n"), 
+                col_names=c("AA", "BB", "CC"))
Error in names(spec$cols) <- col_names : 
  'names' attribute [3] must be the same length as the vector [2]
In addition: Warning message:
Insufficient `col_types`. Guessing 2 columns. 

a我认为最好的办法是在colClasses中为数字列使用NA:

dat <- read.table("qz.csv",colClasses=c(rep(NA,9),"character"), header=TRUE)

dat添加了一个示例,希望对您有所帮助。如果没有,我可以提供一些原始文件。您可以在read函数中添加一个
header=T
?这似乎是问题所在,因为您的第一行包含字符当然,很明显,它已经出现在我的原始代码中。感谢您指出这一点。奇怪的是,它使用
textConnection
与您的代码一起工作,但当该文本位于.csv文件中时就不工作了。我已将代码更新为从文件读取。似乎仍然有效。你能提供你的文件进行测试吗?我已经把它添加到了帖子中。请注意,我在读取文件时排除了几列。提前谢谢!那个dropbox文件看起来也很好用。。。见上文更新,我明白了,谢谢。但是,只要我添加colClasses参数以排除导入的某些列,问题就会返回。
doc <- read.csv("testfile.csv", collClasses=c("character","character",rep("NULL",50),rep("numeric",7),"NULL","NULL"),  col.names=c("country","code",rep("bla",50),"doc08","doc09","doc10","doc11","doc12","doc13","doc14","bla","bla"), skip=4, check.names=F, header=T)
a <- textConnection('"A", "B", "C"
                    "a", "1", "1"
                    "b", "2", "2"')
df <- read.csv(a, colClasses=c("character", "NULL", "numeric"), 
               col.names=c("AA", "BB", "CC"))
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
  scan() expected 'a real', got '"1"'

library("readr")
> df <- read_csv(a, col_types=c("c", "-", "n"), 
+                col_names=c("AA", "BB", "CC"))
Error in names(spec$cols) <- col_names : 
  'names' attribute [3] must be the same length as the vector [2]
In addition: Warning message:
Insufficient `col_types`. Guessing 2 columns. 
dat <- read.table("qz.csv",colClasses=c(rep(NA,9),"character"), header=TRUE)
dat <- read.table("qz.csv",colClasses=rep("character",10), header=TRUE)
dat[,1:9] <- lapply(dat[,1:9], as.numeric)`