在R中卸载大型数据帧有哪些更好的方法?

时间:2011-10-28 22:41:18

标签: r

我想将尺寸为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
...

我已经尝试将数据框移动到数据表中,但仅仅这样做似乎没有帮助。

1 个答案:

答案 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对象进行了简单的重构。