让一年内为特定组计算的平均值适用于给定年份的所有组

Let a mean calculated for a specific group within a year to pertain to all groups in that given year

对于我的标题表述不当,我深表歉意。它与我在发布此问题之前无法找到 similar/related 个问题的情况非常相似。 如果已经有人问过类似的问题,并且已经提供了足够的答案,请告诉我。

我的问题如下:

我生成了一个变量 VarX_mean,它使用以下代码计算 VarX 组的平均值:YearGroup2

setDT(df)[, VarX_mean := mean(VarX), by = c("Year","Group2")]

随后,我将 Group2==0 的 VarX_mean 替换为 0,VarX_mean2

我想创造什么: 我实际上想要的是,为 Group2 计算的 VarX_mean 与全年有关,即列:WhatIWishtoCreate

    Year   Group2   VarX   VarX_mean  VarX_mean2    WhatIWishtoCreate
    2001     1        2      3          3             3
    2001     1        3      3          3             3
    2001     1        4      3          3             3
    2001     0        6      6          0             3
    2002     1        5      5.5        5.5           5.5
    2002     1        6      5.5        5.5           5.5
    2002     0        9      9          0             5.5
    2002     0        9      9          0             5.5
    2002     0        9      9          0             5.5
    2003     1        1      2.5        2.5           2.5
    2003     1        2      2.5        2.5           2.5
    2003     1        4      2.5        2.5           2.5
    2003     1        3      2.5        2.5           2.5
    2003     0        4      4          0             2.5
    2003     0        4      4          0             2.5

提前谢谢你。 亲切的问候

您可以使用 dplyr:

library(dplyr)

df %>%
    group_by(Year) %>% 
    arrange(Group2) %>% 
    mutate(WhatIWishtoCreate = first(VarX_mean)

您可以 select 每个 Year 中的 first VarX_mean 其中 Group2 == 1.

library(data.table)

df[, newcol := first(VarX_mean[Group2 == 1]), Year]
df

#    Year Group2 VarX VarX_mean VarX_mean2 newcol
# 1: 2001      1    2       3.0        3.0    3.0
# 2: 2001      1    3       3.0        3.0    3.0
# 3: 2001      1    4       3.0        3.0    3.0
# 4: 2001      0    6       6.0        0.0    3.0
# 5: 2002      1    5       5.5        5.5    5.5
# 6: 2002      1    6       5.5        5.5    5.5
# 7: 2002      0    9       9.0        0.0    5.5
# 8: 2002      0    9       9.0        0.0    5.5
# 9: 2002      0    9       9.0        0.0    5.5
#10: 2003      1    1       2.5        2.5    2.5
#11: 2003      1    2       2.5        2.5    2.5
#12: 2003      1    4       2.5        2.5    2.5
#13: 2003      1    3       2.5        2.5    2.5
#14: 2003      0    4       4.0        0.0    2.5
#15: 2003      0    4       4.0        0.0    2.5

我们也可以

library(data.table)
df[, newcol := VarX_mean[Group2 == 1][1], Year]