我真的很喜欢ave()
今晚。在分组数据框中,我想要一个变量,其中d==0
包含每个组的控制条件中的值的总和。行 with 也d==1
应该得到值d==0
。如果该组不包含任何内容d==0
,则应生成NA
.
set.seed(26)
n <- 100
df1 <- data.frame(d=rbinom(n, 1, .5),
group=rbinom(n, 5, .5),
val=rnorm(n, 1000, 100))
> head(df1, 3)
d group val
1 0 3 955.9525
2 0 1 1089.0666
3 1 2 993.6181
此ave()
函数生成正确的值,但所有值都d==1
被排除在外。
df1$n0 <- with(df1, ave(val[d == 0], group, FUN=sum))
有了这个,ifelse()
我也无法得到正确的东西。
with(df1, ifelse(d==0,
ave(val[d==0], group, FUN=sum),
NA))
我想要这样的东西
d group val n0
1 0 1 955 955
3 1 1 993 955
4 1 2 949 1895
5 0 2 954 1895
6 0 2 941 1895
...
我如何包含d==1
条件,以便他们接收d==0
值?
在这种情况下,一些算术有效:
df1$n0 <- with(df1, ave(val*(d==0), group, FUN=sum))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句