转置数据表 [英] Transposing a data.table

查看:79
本文介绍了转置数据表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在数据计算结束后有效转换数据表的好方法是什么

What would be a good way to efficiently transform a data.table after the data computation is over

nrow=500e3
ncol=2000
m <- matrix(rnorm(nrow*ncol),nrow=nrow)
colnames(m) <- c('foo',seq(ncol-1))
dt <- data.table(m)
df <- as.data.frame(m)
dt <- t(dt)  #take a long time and converts the data table to a matrix

计算时间

1. to transpose the matrix
system.time(mt <- t(m))
   user  system elapsed
 20.005   0.016  20.024

2. to transpose the dt
system.time(dt <- t(dt))
user  system elapsed
32.722  15.129  47.855

3. to transpose a df
system.time(df <- t(df))
user  system elapsed
32.414  15.357  47.775


推荐答案

这是一个很老的问题,从那时起, data.table 添加/导出了 transpose 用于转置列表。在性能方面,除矩阵外,它的表现优于 t (我认为这是可以预期的)

This is quite an old question, and since then data.table has added/exported transpose for transposing lists. Performance-wise, it out-performs t except on matrices (I think this is to be expected)

system.time(t(m))
 #   user  system elapsed 
 # 23.990  23.416  85.722 
system.time(t(dt))
 #   user  system elapsed 
 # 31.223  53.197 195.221 
system.time(t(df))
 #   user  system elapsed 
 # 30.609  45.404 148.323 
system.time(setDT(transpose(dt)))
 #   user  system elapsed 
 # 42.135  38.478 116.599

这篇关于转置数据表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆