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您应该提供一个模拟原始数据集的输入数据。