gpt4 book ai didi

r - 跨多个顺序因素的数据表分组

转载 作者:行者123 更新时间:2023-12-02 07:25:55 26 4
gpt4 key购买 nike

我正在尝试估计 data.tablen 个因素的一些参数.虽然我熟悉使用 by按因素执行操作的功能;对多个顺序因素执行此操作会导致一些问题。

举个简单的例子

df <- data.table(Group = c(rep("A", 2), rep("B", 3), rep("C", 2), rep("D", 4), "E", rep("F", 4)), Variable = round(rnorm(16), 2))

Group Variable
1: A 0.13
2: A 0.26
3: B -1.36
4: B -0.78
5: B -0.92
6: C 0.00
7: C -2.49
8: D -1.85
9: D 0.37
10: D -0.57
11: D 1.42
12: E -0.72
13: F -1.04
14: F 1.86
15: F 0.49
16: F 1.61

使用 df[, mean(Variable), by = Group]会给出每个组的平均值。但是,我想计算前 n 个组的平均值。
我试过使用 M[, zoo::rollapply(Variable, n, mean), by = Group] ,但是,因为组的大小不同,使用固定的 n 将不起作用。

想要的是类似于 df[, mean(Variable), by = "This Group and previous n Groups] 的功能.

我试图实现的输出(对于 n = 3 的情况)看起来像

Group Variable
1: A NA
2: A NA
3: B NA
4: B NA
5: B NA
6: C 0.13
7: C 0.13
8: D -1.36
9: D -1.36
10: D -1.36
11: D -1.36
12: E 0
13: F -1.85
14: F -1.85
15: F -1.85
16: F -1.85

如有任何帮助,我们将不胜感激。

最佳答案

library(data.table)
library(RcppRoll)
df1 <- df[, .(n=.N, S=sum(Variable)), by = Group]
df1[, NewVariable:=roll_sum(S, 3, align="right", fill=NA)/roll_sum(n, 3, align="right", fill=NA),]
df[df1, on="Group"]
Group Variable n S NewVariable
1: A -0.63 2 -0.45 NA
2: A 0.18 2 -0.45 NA
3: B -0.84 3 1.09 NA
4: B 1.60 3 1.09 NA
5: B 0.33 3 1.09 NA
6: C -0.82 2 -0.33 0.04428571
7: C 0.49 2 -0.33 0.04428571
8: D 0.74 4 2.52 0.36444444
9: D 0.58 4 2.52 0.36444444
10: D -0.31 4 2.52 0.36444444
11: D 1.51 4 2.52 0.36444444
12: E 0.39 1 0.39 0.36857143
13: F -0.62 4 -1.75 0.12888889
14: F -2.21 4 -1.75 0.12888889
15: F 1.12 4 -1.75 0.12888889
16: F -0.04 4 -1.75 0.12888889

我希望我的解决方案是不言自明的。

dplyr 等价于

df %>% 
group_by(Group) %>%
summarise(n=n(), S=sum(Variable)) %>%
mutate(NewVar=roll_sum(S, 3, align="right", fill=NA)/roll_sum(n, 3, align="right", fill=NA)) %>%
left_join(df, by="Group")

数据

set.seed(1)
df <- data.table(Group = c(rep("A", 2), rep("B", 3), rep("C", 2), rep("D", 4), "E", rep("F", 4)), Variable = round(rnorm(16), 2))

包裹信息

[1] RcppRoll_0.2.2   data.table_1.9.5

关于r - 跨多个顺序因素的数据表分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31902759/

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