gpt4 book ai didi

r - 转置 data.table 的最佳方法

转载 作者:行者123 更新时间:2023-12-03 08:17:00 28 4
gpt4 key购买 nike

[更新:现在有一个本地 transpose()函数在 data.table包裹]

我经常需要转置data.table ,每次都需要几行代码,我想知道是否有比我更好的解决方案。

如果我们拿 sample 表

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

有什么我可以在这里优化或以“更好”的方式进行的吗?

最佳答案

为什么不只是 meltdcast 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

关于r - 转置 data.table 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28653867/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com