best way to transpose data.table
The current docs show a builtin transpose
method.
Specifically, you can do:
transpose(mydata, keep.names = "col", make.names = "col0")
## col row1 row2 row3
## 1: col1 11 21 31
## 2: col2 12 22 32
## 3: col3 13 23 33
Why not just melt
and dcast
the data.table
?
require(data.table)
dcast(melt(mydata, id.vars = "col0"), variable ~ col0)
# variable row1 row2 row3
# 1: col1 11 21 31
# 2: col2 12 22 32
# 3: col3 13 23 33
Here's an alternative solution that only uses data.table
and that is closer to the original idea of using t
to transpose.
mydata[, data.table(t(.SD), keep.rownames=TRUE), .SDcols=-"col0"]
## rn V1 V2 V3
## 1: col1 11 21 31
## 2: col2 12 22 32
## 3: col3 13 23 33
If keeping the rownames is important, setnames
can be used. Admittedly this becomes a bit clumsy and probably the recast solution is preferable.
setnames(mydata[, data.table(t(.SD), keep.rownames=TRUE), .SDcols=-"col0"],
mydata[, c('rn', col0)])[]
## rn row1 row2 row3
## 1: col1 11 21 31
## 2: col2 12 22 32
## 3: col3 13 23 33
df <- as.data.frame(t(mydata))
is what I tried and df
is a data.frame
and the column names on mydata
are now row names on df