write
和read.csv
的一个奇怪问题。我有办法解决这个问题,但如果有人能够确定发生了什么,那就太棒了。
我有来自其他人的代码,它通过追加新行来动态创建一系列CSV。问题是read.csv
似乎不一致地读取新创建的csv。
虚拟代码示例:
datfile <- "E:/temp.csv"
write(paste("Name","tempname",sep=","),datfile,1)
write(paste("VShort",50,sep=","),datfile,1,append=T)
write(paste("Short1",1,1,sep=","),datfile,1,append=T)
write(paste("Short2",0,2,sep=","),datfile,1,append=T)
write(paste("Short3",0,2,sep=","),datfile,1,append=T)
write(paste("Long",0,0.3,0.6,1,sep=","),datfile,1,append=T)
write(paste("Short4",2,0,sep=","),datfile,1,append=T)
read.csv(datfile,header=F,colClasses="character")
七行数据写入CSV,但read.csv
读取8行(Long
分为两行)。读入了8行和3列。
通过在Excel中打开temp.csv并保存来解决此问题。然后read.csv
适当地读入7行。
在某些情况下,问题似乎只存在。例如,删除Short 3
并且没有问题:
datfile2 <- "E:/temp2.csv"
write(paste("Name","tempname",sep=","),datfile2,1)
write(paste("VShort",50,sep=","),datfile2,1,append=T)
write(paste("Short1",1,1,sep=","),datfile2,1,append=T)
write(paste("Short2",0,2,sep=","),datfile2,1,append=T)
write(paste("Long",0,0.3,0.6,1,sep=","),datfile2,1,append=T)
write(paste("Short4",2,0,sep=","),datfile2,1,append=T)
read.csv(datfile2,header=F,colClasses="character")
读入六行五列。
这里有什么想法?
R版本3.2.4修订
Windows 10
答案 0 :(得分:2)
这可能与?read.csv
中的以下内容有关:
通过查看前五个来确定数据列的数量 输入行(或整个文件,如果它少于五行),或 从col.names的长度开始,如果指定并且更长。这个 如果填充或blank.lines.skip是真的,那么可能是错误的 必要时指定col.names(如'Examples'中所示)。
恰好,列数最多的行是第一个示例中的第六行。
我建议使用col.names
来解决这个问题,例如:
`... read.csv(..., col.names = paste0('V', 1:6))`
正如OP在对此答案的评论中所说,你可以找出它的数量
使用readLines
所需的列:
Ncol <- max(unlist(lapply(strsplit(readLines(datfile), ","), length)))
然后修改上面的内容给出:
read.csv(datfile,header=F,colClasses="character", col.names=paste0("V", 1:Ncol))