我在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导出功能?谢谢!
答案 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" )
我想这太过分了,但以防万一......