我今晚真的进入了ave()
。在分组数据框中,我想要一个变量,其中每个组的控制条件d==0
中的值之和。 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
个值?
答案 0 :(得分:2)
在这种情况下,一些算术运算:
df1$n0 <- with(df1, ave(val*(d==0), group, FUN=sum))