R中各组的条件累积平均值

R中各组的条件累积平均值,r,dplyr,mean,R,Dplyr,Mean,我有一个如下所示的数据集: id a b 1 AA 2 1 AB 5 1 AA 1 2 AB 2 2 AB 4 3 AB 4 3 AB 3 3 AA 1 我需要计算每组中每个记录的累积平均值,不包括a==“AA”,因此样本输出应为: id a b mean 1 AA 2 - 1 AB 5 5 1 AA 1 5 2 AB 2 2 2 AB 4 (4+2)/

我有一个如下所示的数据集:

id   a   b
1    AA  2
1    AB  5
1    AA  1
2    AB  2
2    AB  4
3    AB  4
3    AB  3
3    AA  1
我需要计算每组中每个记录的累积平均值,不包括
a==“AA”
,因此样本输出应为:

id   a   b  mean
1    AA  2   -
1    AB  5   5
1    AA  1   5
2    AB  2   2
2    AB  4   (4+2)/2
3    AB  4   4
3    AB  3   (4+3)/2
3    AA  1   (4+3)/2
3    AA  4   (4+3)/2
我试图通过使用dplyr和cummean获得一个错误来实现它

df <- df %>%
       group_by(id) %>%
       mutate(mean = cummean(b[a != 'AA']))
df%
分组依据(id)%>%
变异(平均值=平均值(b[a!='AA']))
错误:大小不兼容(123),应为147(组大小)或1


你能推荐一个更好的方法来实现同样的目标吗?

可能有一个更简单的方法。在这里,我们按“id”分组。首先将“b”中与“a”中的“AA”相对应的元素转换为
NA
b*NA^(a='AA')
),创建一个新的列“Mean”
NA^(a=='AA')
为'a'中的'AA'提供了
NA
的输出,为所有其他值提供了1。因此,当我们乘以“b”时,它用“b”中的值替换1,而NA保持不变。我们使用
na.aggregate
将“na”替换为每组非na元素的
mean
,然后用
cummean
包裹以获得累积平均值。如果每个组中“a”的第一个值是“AA”,我们可以通过乘以
NA^(row_number()==1&a==AA')
得到该值的
NA

数据
df可能有更简单的方法。在这里,我们按“id”分组。首先将“b”中与“a”中的“AA”相对应的元素转换为
NA
b*NA^(a='AA')
),创建一个新的列“Mean”
NA^(a=='AA')
为'a'中的'AA'提供了
NA
的输出,为所有其他值提供了1。因此,当我们乘以“b”时,它用“b”中的值替换1,而NA保持不变。我们使用
na.aggregate
将“na”替换为每组非na元素的
mean
,然后用
cummean
包裹以获得累积平均值。如果每个组中“a”的第一个值是“AA”,我们可以通过乘以
NA^(row_number()==1&a==AA')
得到该值的
NA

数据
df这里的技巧是通过将调整后的
cumsum
除以调整后的计数来重建
cummean
。作为一个班轮:

df %>% group_by(id) %>% mutate(cumsum(b * (a != 'AA')) / cumsum(a != 'AA'))
我们可以通过去掉
a!='AA'
-magic!“乘以
a!='AA'
-magic!”使它变得更好一些AA'
作为一列

df %>%
    group_by(id) %>%
    mutate(relevance = 0+(a!='AA'), 
           mean = cumsum(relevance * b) / cumsum(relevance))

这里的技巧是通过将调整后的
cumsum
除以调整后的计数来重建
cummean
。作为一个班轮:

df %>% group_by(id) %>% mutate(cumsum(b * (a != 'AA')) / cumsum(a != 'AA'))
我们可以通过去掉
a!='AA'
-magic!“乘以
a!='AA'
-magic!”使它变得更好一些AA'
作为一列

df %>%
    group_by(id) %>%
    mutate(relevance = 0+(a!='AA'), 
           mean = cumsum(relevance * b) / cumsum(relevance))

看起来您想要的是同一组中连续值的成对平均值,而不是cummean。看起来您想要的是同一组中连续值的成对平均值,而不是cummean。竖起拇指查看
na.aggregate
。R中没有函数,@akrun@khasha未知。谢谢投票。我从@akrun得到了na的
aggregate
,可能在a中的前2或3行有na。在这些情况下,平均值应为NA。@DheerajSingh您应该提供一个模拟原始数据集的输入数据。竖起拇指看
NA.aggregate
。R中没有函数,@akrun@khasha未知。谢谢投票。我从@akrun得到了na的
aggregate
,可能在a中的前2或3行有na。在这些情况下,平均值应该是NA。@DheerajSingh您应该提供一个模拟原始数据集的输入数据。