我想将尺寸为103740 x 4的数据帧重新整形为宽格式,即从下面的第一个文本块转到第二个。当应用于部分数据框时,以下功能运行良好,但在应用于完整数据框时耗尽了机器的可用内存:
reshape(analysis1[1:8], idvar=c("name", "sire_name"),
timevar = "course", direction = "wide")[, -c(1,2)]
有哪些更好的方法可以拆分此数据框?
name sire_name course appearance
1 A Beetoo Bahhare Kempton 0
2 A Beetoo Bahhare Lingfield 9
3 A Beetoo Bahhare Southwell 0
4 A Beetoo Bahhare Wolverhampton 0
5 A Bid In Time Danetime Kempton 0
6 A Bid In Time Danetime Lingfield 3
7 A Bid In Time Danetime Southwell 2
8 A Bid In Time Danetime Wolverhampton 2
...
Kempton Lingfield Southwell Wolverhampton
1 0 9 0 0
5 0 3 2 2
...
我已经尝试将数据框移动到数据表中,但仅仅这样做似乎没有帮助。
答案 0 :(得分:1)
当你想要它非常简单时,像基地R中的重塑将是最有效的。我只是制作一个外观矩阵,将其转换为data.frame类型,并命名列。
newDF <- data.frame( matrix(oldDF$appearance, ncol = 4, byrow = TRUE) )
names(newDF) <- oldDF$course[1:4]
现在,如果你没有像你提出的那样对框架进行排序,甚至可能在课程列中有更多的值,那么下面的内容会更强大......
oldDF <- oldDF[ order(oldDF$course), ]
s <- sort(unique(oldDF$course))
newDF <- data.frame( matrix(oldDF$appearance, ncol = length(s)) )
names(newDF) <- s
(如果您愿意,可以在订单功能中添加其他列以断开关系)
可用于重塑数据的许多命令的一大优势是它们对数据的顺序,缺少单元格等是健壮的。但是,当你'时,这也使它们通常很慢我们对一个非常大的data.frame对象进行了简单的重构。