如何将不整洁的列表转换为整洁的数据框?

How to translate an untidy list into a tidy data frame?

我在网上抓取的数据的结构很奇怪。我无法将此矢量整理到数据框中。

下面的图表描述了数据如何流经向量,如箭头所示。

在将向量转换为矩阵时,我正在努力寻找一种有效的方法来执行此操作。我可以通过每 20 个条目进行子集化来获得所需的结果。

可重现代码

c("+282", "-331", "+295", "-325", "+283", "-352", "+270", "-325", 
"+260", "-320", "+270", "-330", "+275", "-340", "+265", "-325", 
"+283", "-352", "+270", "-325", "+266", "-311", "+280", "-310", 
"+267", "-330", "+260", "-310", "+275", "-350", "+265", "-325", 
"+270", "-330", "+250", "-320", "+267", "-330", "+260", "-310")

** 获得预期结果的工作代码

as.data.frame(matrix(odds[1:20], ncol = 10, byrow = F))
as.data.frame(matrix(odds[21:40], ncol = 10, byrow = F))

理论上我可以将这两个数据帧绑定在一起,但是在我更大的数据集中我有大量的子集需要完成才能完成。解决这个问题最有效的方法是什么?

您可以创建一个包含每 20 个值的数据框并将它们组合起来:

n <- 20
do.call(rbind, by(odds, ceiling(seq_along(odds)/n), function(x) 
               data.frame(matrix(x, ncol = n/2))))

#      X1   X2   X3   X4   X5   X6   X7   X8   X9  X10
#1.1 +282 +295 +283 +270 +260 +270 +275 +265 +283 +270
#1.2 -331 -325 -352 -325 -320 -330 -340 -325 -352 -325
#2.1 +266 +280 +267 +260 +275 +265 +270 +250 +267 +260
#2.2 -311 -310 -330 -310 -350 -325 -330 -320 -330 -310