gpt4 book ai didi

r - 通过引用处理具有 := (data. 表分配的复杂公式)

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

要计算 x 上的一些 label 聚合并将其添加到数据中,我可以使用以下代码,对于 mean,它是:

library(data.table)  
setDT(data)[, y := mean(x), label]

但是如何计算意味着只有当 label 给出的组大小超过 5 时,否则输入 0。我首先尝试使用 lengthnrow 而不是 mean 关键字来计算组的大小,但这不是正确的方法并且不起作用。我使用的示例数据集:
set.seed(123)

data<-data.frame(label=sample(c("A","B"),10,replace=TRUE),x=rnorm(10))
data
# label x
#1 A 1.7150650
#2 B 0.4609162
#3 A -1.2650612
#4 B -0.6868529
#5 B -0.4456620
#6 A 1.2240818
#7 B 0.3598138
#8 B 0.4007715
#9 B 0.1106827
#10 A -0.5558411

我看到这样的尝试代码:
setDT(data)[, y := ifelse(nrow(x)>10,mean(x),0), label] # don't run

是错误的方向。

最佳答案

我建议您避免将 ifesle 放在一起,因为效率和因为当您不想计算平均值时放置 0 是错误的,如果其中一个组的平均值也为零会发生什么,您将如何区分它们之间?我只想做

setDT(data)[, y := mean(x)[.N > 4] , label][]
# label x y
# 1: A 1.7150650 NA
# 2: B 0.4609162 0.03327823
# 3: A -1.2650612 NA
# 4: B -0.6868529 0.03327823
# 5: B -0.4456620 0.03327823
# 6: A 1.2240818 NA
# 7: B 0.3598138 0.03327823
# 8: B 0.4007715 0.03327823
# 9: B 0.1106827 0.03327823
# 10: A -0.5558411 NA

关于r - 通过引用处理具有 := (data. 表分配的复杂公式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28331495/

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