gpt4 book ai didi

r - 一步熔断/dcast

转载 作者:行者123 更新时间:2023-12-04 12:53:01 24 4
gpt4 key购买 nike

我有以下 data.table

library(data.table)
testdt <- data.table(var1=rep(c("a", "b"), e=3), p1=1:6, p2=11:16)
# var1 p1 p2
#1: a 1 11
#2: a 2 12
#3: a 3 13
#4: b 4 14
#5: b 5 15
#6: b 6 16

我需要每个 var1 的中值每个 p* , p*应该在行和 var1 的不同唯一值中在列中。
所以,我正在寻找这个输出:
 variable  a  b
1 p1 2 5
2 p2 12 15

我发现获得它的最简单方法是:
dcast(melt(testdt, id.vars = "var1", measure.vars = c("p1", "p2")),
variable ~ var1,
value.var = "value",
fun.aggregate = median)

但我有一种感觉,我在这里错过了一些东西(比如最合适的功能),所以我很想知道一种直接的方式(独特的功能)来做同样的事情。

我知道 recast reshape2 包可以用 recast(testdt, variable~var1, fun=median, id.var="var1") 来解决问题,但我想避免加载另一个包。

编辑:

我正在寻找一种既简单又高效的解决方案。这将应用于具有 ~300 列和 ~80 行的 ~40 个表的列表

最佳答案

如果速度是主要问题,如果计算 median,速度会略微提高约 23%(尽管以毫秒为单位)。第一的。随着数据集大小的增长,由于要融合的数据越来越少,此增量也可能会增加。

library(data.table)
dcast(melt(testdt[, lapply(.SD, median), by=var1], id.vars="var1"), variable ~ var1))

基准
Unit: milliseconds

expr min lq mean median uq max neval
fun.aggregate = median 4.221654 4.453063 4.87418 4.510775 4.579718 35.28569 1000
lapply(.SD, median) 3.196289 3.410711 3.77483 3.461073 3.523096 22.78637 1000

关于r - 一步熔断/dcast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34944434/

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