gpt4 book ai didi

r - 使用 data.table 的垂直条件创建一个新列

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

我正在尝试使用 data.table如果data.table,我不会进行手术专为。假设我有以下内容

set.seed(1)
id<-rep(LETTERS[1:6], each=3)
event<-rep(letters[1:4], each=3, length.out=18)
order<-rep(1:3, 6)
var<-rnorm(18)

dt<-data.table(id, event, order, var)
setkey(dt, id)

id event order var
1: A a 1 -0.62645381
2: A a 2 0.18364332
3: A a 3 -0.83562861
4: B b 1 1.59528080
5: B b 2 0.32950777
6: B b 3 -0.82046838
7: C c 1 0.48742905
8: C c 2 0.73832471
9: C c 3 0.57578135
10: D d 1 -0.30538839
11: D d 2 1.51178117
12: D d 3 0.38984324
13: E a 1 -0.62124058
14: E a 2 -2.21469989
15: E a 3 1.12493092
16: F b 1 -0.04493361
17: F b 2 -0.01619026
18: F b 3 0.94383621

我需要在新列中计算 Euclidean distancevar 中的值之间有不同的id但同样event类型,维护给定的 order观察结果。

我了解到分组 by命令在 data.table声明我将数据分成 block ,我可以将这些 block 与来自其他 data.table 的其他 block 结合使用s 但我可以在同一个 data.table 中做同样的事情吗? ?

说清楚,这就是我想要得到的

    id event order         var   euclid
1: A a 1 -0.62645381 3.097720
2: A a 2 0.18364332 3.097720
3: A a 3 -0.83562861 3.097720
4: B b 1 1.59528080 2.433635
5: B b 2 0.32950777 2.433635
6: B b 3 -0.82046838 2.433635
7: C c 1 0.48742905 NA
8: C c 2 0.73832471 NA
9: C c 3 0.57578135 NA
10: D d 1 -0.30538839 NA
11: D d 2 1.51178117 NA
12: D d 3 0.38984324 NA
13: E a 1 -0.62124058 3.097720
14: E a 2 -2.21469989 3.097720
15: E a 3 1.12493092 3.097720
16: F b 1 -0.04493361 2.433635
17: F b 2 -0.01619026 2.433635
18: F b 3 0.94383621 2.433635

非常感谢!

最佳答案

不确定效率,但这应该在基本层面上有效:

dt[, euclid:= dist(xtabs(var ~ id + order, data=.SD)), by=event]

# id event order var euclid
# 1: A a 1 -0.62645381 3.097720 # snip
# 4: B b 1 1.59528080 2.433635 # snip
# 7: C c 1 0.48742905 NA # snip
#10: D d 1 -0.30538839 NA # snip
#13: E a 1 -0.62124058 3.097720 # snip
#16: F b 1 -0.04493361 2.433635 # snip

为了解决@Arun 的问题,其中有 3 个以上的组,您可以对 dist 输出求和,但您将得到 0 而不是只有一个组的 NA:

dt[, euclid := sum(dist(xtabs(var ~ id + order, data=.SD))), by=event]

关于r - 使用 data.table 的垂直条件创建一个新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21715773/

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