R中的CSV输出包括引号和额外字符

时间:2015-07-24 21:15:48

标签: r

我在R中包含一个长列表(" mylist"),其中包含我要导出到.csv的字符序列,以便每个单元格包含1个字符:

> str(mylist)
List of 1
 $ :List of 259
  ..$ : chr [1:214] "A" "B" "C" "D" ...
  ..$ : chr [1:220] "E" "F" "G" "H" ...

当我在这上面使用write.csv时,我收到一个错误,因为列表包含不同数量的行。精细。所以我试试:

mynewlist<-do.call("cbind", mylist)
write.csv(t(mynewlist), file="mynewlist.csv", quote = FALSE)

但我得到

    V1        V2     V3       V4    V5
1   c("A"    "B"     "C"     "D"    ...

作为我的输出加载到excel时,它仍然包含双引号和&#34; c(&#34;在第一个单元格中看到。此外,尽管CSV的第一行应该有214列,它包裹在101个单元格之后的新行中.write.csv和write.table函数看起来非常简单,我的数据集也是如此,所以我不确定这里发生了什么。有什么想法的原因我无法获得干净的CSV导出功能?谢谢!

2 个答案:

答案 0 :(得分:0)

write.table只在您使用它一次写入所有行时才关心数据格式。你可以简单地将它包装成循环:

mylist <- list(sample(letters,10), sample(letters,20))

# write in a loop
for(i in mylist) write.table(t(i), "mytext.csv", quote=F, append=T, 
                 col.names=F, row.names=F)

结果文件的内容:

n v w x d y o k u m
w p z d x o u i s h y r f b c l e k m v

请注意,append=T不会警告您该文件是否已存在,因此请在必要时进行更好的检查。

答案 1 :(得分:0)

你想要实现的目标并不是很清楚。使用write.csv(),您将首先拥有一个data.frame,但是您有一个由不同长度的字符串向量组成的列表。

如果您只想将一个列表项的所有字符写在一行中,用逗号分隔,这就是我要使用的内容:

for( i in mylist ) cat( file = "myfile.csv", i, "\n", sep = ",", append = TRUE )

如果您想首先构建一个data.frame,然后可以使用write.csv()保存到文件,事情就会复杂一些。优势可能是(取决于您接下来的步骤)所有行具有相同的长度。

# get max length of of list items
longest <- max( sapply( mylist, length ) )
# initialize data.frame
myDF <- NULL
# loop through your list and make it a data.frame (matrix, actually)
for( i in 1 : length( mylist ) )
{
  # fill up with empty strings
  empty <- longest - length( mylist[[ i ]] )
  mylist[[ i ]] <- c( mylist[[ i ]], rep( "", empty ) )
  # append to data.frame
  myDF <- rbind( myDF, mylist[[ i ]] )
}
# now you can juse write.csv()
write.csv( myDF, "myfile.csv" )

我想这太过分了,但以防万一......