让一年内为某一特定群体计算的平均数适用于该年的所有群体。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了让一年内为某一特定群体计算的平均数适用于该年的所有群体。相关的知识,希望对你有一定的参考价值。
我为我的标题表述不当而道歉。如果已经有人问过类似的问题,并且已经提供了足够的答案,请告诉我。
我的问题是这样的。
我已经生成了一个变量。VarX_mean
的平均值,计算出 VarX
跨组。Year
和 Group2
,使用以下代码。
setDT(df)[, VarX_mean := mean(VarX), by = c("Year","Group2")]
随后,我将Group2==0的VarX_mean替换为0。VarX_mean2
.
我想创造什么: 其实我想,是为了 VarX_mean
计算的 Group2
以涉及全年,即列。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)
另一答案
您可以选择 first
VarX_mean
在每 Year
哪儿 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]
以上是关于让一年内为某一特定群体计算的平均数适用于该年的所有群体。的主要内容,如果未能解决你的问题,请参考以下文章