在R中移动.csv文件中的列表;无法正确使用'unlist'
我在R中生成了列表L,带有在R中移动.csv文件中的列表;无法正确使用'unlist',r,list,csv,R,List,Csv,我在R中生成了列表L,带有 L <- list() L[[1]] <-cbind ("Orks", "Eldar") L[[2]] <-cbind ("Nid", "Tau") 我想用以下输出编写一个.csv文件 Number Type 1 Orks, Eldar 2 Nid, Tau i、 e.将列表组件L[[i]]传输到文件的第i行,使用上述拆分和列名。我开始使用 LL <- data.frame(matrix(unli
L <- list()
L[[1]] <-cbind ("Orks", "Eldar")
L[[2]] <-cbind ("Nid", "Tau")
我想用以下输出编写一个.csv文件
Number Type
1 Orks, Eldar
2 Nid, Tau
i、 e.将列表组件L[[i]]传输到文件的第i行,使用上述拆分和列名。我开始使用
LL <- data.frame(matrix(unlist(L), nrow=2) )
LL您可以使用以下方法更改数据的形状:
data.frame(
Number = seq_along(L),
Type = vapply(L, toString, character(1))
)
如果在值中使用逗号(如在Type
列中),您可能更喜欢使用制表符作为分隔符而不是逗号来保存文件。(调用read.delim
代替read.csv
)R将正确引用带有逗号的值,但其他软件可能需要一些修改来读取文件。您需要使用I()
来保护列表
结构(在公式
对象中更常用)
I()
是一个用于
更改对象的类以指示它应按“原样”处理
我将sapply
替换为vapply
,因为当L
长度为零时,它可以正常工作。有趣的是:输出df[1,2]
是一个1x2矩阵。你知道为什么print
方法会选择在里面加一个逗号吗?非常巧妙的想法。不过,将列表强制放入数据帧有点不标准,可能会导致代码难以理解。请注意,write.csv
的输出也有点奇怪。不幸的是,我无法改进write.csv
的输出;我相信这是因为数据帧的每个元素都是一个矩阵,正如你们都提到的。有什么想法吗?:-)@Avitus关于data.frame(Number=1:length(L),Type=do.call(paste,L))
?这对您的输出有帮助吗?@RichieCotton实际上这是I()
的一个有文档记录的用例(但同意这不是一个使用良好的用例)。。。并确保矩阵作为单列插入。ldply
,在适当的条件下,也可以从plyr
包快速完成此操作。
data.frame(
Number = seq_along(L),
Type = vapply(L, toString, character(1))
)
data.frame( Number = 1:length(L) , Type = I(L) )
# Number Type
#1 1 Orks, Eldar
#2 2 Nid, Tau