如何对R data.table进行转置?为什么';工作?

如何对R data.table进行转置?为什么';工作?,r,data.table,transpose,R,Data.table,Transpose,我有下面的R数据表 library(data.table) mtcars = as.data.table(mtcars) dt = colSums(mtcars) > dt mpg cyl disp hp drat wt qsec vs 642.900 198.000 7383.100 4694.000 115.090 102.952 571.160 14.000 am

我有下面的R数据表

library(data.table)
mtcars = as.data.table(mtcars)
dt = colSums(mtcars)

> dt
     mpg      cyl     disp       hp     drat       wt     qsec       vs 
 642.900  198.000 7383.100 4694.000  115.090  102.952  571.160   14.000 
      am     gear     carb 
  13.000  118.000   90.000 
我想对data.table
dt
进行如下重塑:

> transpose
column1   column2
mpg       642.900
cyl       198.000
disp      7373.100
hp        4694.000
drat      115.090
wt        102.952
qsec      571.160
vs        14.000
am        13.000
gear      118.000
carb      90.000
函数
t()
似乎无法按预期工作

transpose = t(dt)

我怀疑有一种快速的方法可以使用
melt()
dcast()
,但我不确定如何定义每一列,即
column1
column2
我发现这是可行的:

df = as.data.table(t(as.matrix(dt)))

它甚至保留了名称

A
dplyr
解决方案:

library(dplyr)
library(data.table)
mtcars <- data.table(mtcars) # make data.table
class(mtcars) # check that it is a data.table
mtcars %>% # take the data.table
  summarise_all(funs(sum)) %>% # get the sum of each column
  gather(variable, sum) # gather all columns

dt
不是数据表。试试
data.table(dt)
Ah,我明白了。简单地强制转换
dt=as.data.table(colSums(mtcars))
似乎会像Rich所说的那样删除列名。例如,如果您想使用data.table语法,可以使用
melt(mtcars)[,sum(value),by=variable]
。@DavidArenburg,post-as-answer?如果您确实想使用
colSums
,请尝试
stack(dt)
。不过,对于data.table来说,这一点也不惯用。
   variable      sum
1       mpg  642.900
2       cyl  198.000
3      disp 7383.100
4        hp 4694.000
5      drat  115.090
6        wt  102.952
7      qsec  571.160
8        vs   14.000
9        am   13.000
10     gear  118.000
11     carb   90.000