Мне часто нужно транспонировать a data.table
, каждый раз, когда требуется несколько строк кода, и мне интересно, есть ли лучшее решение, чем мое.
если взять таблицу образцов
library(data.table)
mydata <- data.table(col0=c("row1","row2","row3"),
col1=c(11,21,31),
col2=c(12,22,32),
col3=c(13,23,33))
mydata
# col0 col1 col2 col3
# row1 11 12 13
# row2 21 22 23
# row3 31 32 33
и просто транспонируйте его с помощью t()
, он будет перенесен в матрицу с преобразованием в тип character
, а применение data.table
к такой матрице потеряет row.names
:
t(mydata)
# [,1] [,2] [,3]
# col0 "row1" "row2" "row3"
# col1 "11" "21" "31"
# col2 "12" "22" "32"
# col3 "13" "23" "33"
data.table(t(mydata))
# V1 V2 V3
# row1 row2 row3
# 11 21 31
# 12 22 32
# 13 23 33
поэтому мне пришлось написать для этого функцию:
tdt <- function(inpdt){
transposed <- t(inpdt[,-1,with=F]);
colnames(transposed) <- inpdt[[1]];
transposed <- data.table(transposed, keep.rownames=T);
setnames(transposed, 1, names(inpdt)[1]);
return(transposed);
}
tdt(mydata)
# col0 row1 row2 row3
# col1 11 21 31
# col2 12 22 32
# col3 13 23 33
есть ли что-нибудь, что я мог бы оптимизировать здесь или сделать это "лучше"?