让一年内为特定组计算的平均值适用于给定年份的所有组
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
组的平均值:Year
和 Group2
:
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]
对于我的标题表述不当,我深表歉意。它与我在发布此问题之前无法找到 similar/related 个问题的情况非常相似。 如果已经有人问过类似的问题,并且已经提供了足够的答案,请告诉我。
我的问题如下:
我生成了一个变量 VarX_mean
,它使用以下代码计算 VarX
组的平均值:Year
和 Group2
:
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]