使用dplyr查找前一组分组数据的平均值
下面是我正在处理的一些数据的一个最小工作示例使用dplyr查找前一组分组数据的平均值,r,dplyr,R,Dplyr,下面是我正在处理的一些数据的一个最小工作示例 set.seed(42) value <- sample(1:10, 10) group <- rep(700, each= 10) order <- c(1,1,1,2,2,2,2,2,2,2) df <- as.data.frame(cbind(value, group, order)) value group order 1 10 700 1 2 9 700 1 3
set.seed(42)
value <- sample(1:10, 10)
group <- rep(700, each= 10)
order <- c(1,1,1,2,2,2,2,2,2,2)
df <- as.data.frame(cbind(value, group, order))
value group order
1 10 700 1
2 9 700 1
3 3 700 1
4 6 700 2
5 4 700 2
6 8 700 2
7 5 700 2
8 1 700 2
9 2 700 2
10 7 700 2
我使用的是dplyr
和groupby
,但我想不出一种方法来使用mutate
和mean()
引用上一组
任何帮助都会很好
谢谢我们可以用
base R
完成这项工作。按“顺序”创建元素的向量
。然后,循环遍历“Un1”中的元素序列,将“df”(“x1”)子集,根据先前“value”元素的子集获得Mean
值,在数据集中创建一列“Mean”,并rbind
输出
Un1 <- unique(df$order)
do.call(rbind,lapply(seq_along(Un1), function(i) {
x1 <- df[df$order==Un1[i],]
Mean=mean(df[df$order==Un1[i-1],1])
transform(x1,Mean=Mean) }))
Un1这有点棘手,因为一旦您通过某些变量对数据进行分组,您就无法轻松访问其他组的数据,除非您参考原始数据集(例如再次使用df$…
,但您没有找到正确的组)。我可能还没有找到更直接的方法,但这里有一个潜在的基于dplyr的方法来解决这个问题:
df %>%
group_by(group, order) %>% # group the data
summarise(mean = mean(value)) %>% # summarise with mean per group & order
mutate(mean = lag(mean)) %>% # get the previous group's mean
right_join(df) # join to original data
# Source: local data frame [10 x 4]
# Groups: group [?]
#
# group order mean value
# (dbl) (dbl) (dbl) (dbl)
# 1 700 1 NA 10
# 2 700 1 NA 9
# 3 700 1 NA 3
# 4 700 2 7.333333 6
# 5 700 2 7.333333 4
# 6 700 2 7.333333 8
# 7 700 2 7.333333 5
# 8 700 2 7.333333 1
# 9 700 2 7.333333 2
# 10 700 2 7.333333 7
一个数据表模拟(我想):df[df[,mean(value),by=order][,v:=shift(V1)],on=“order”,m:=v,by=.EACHI]
@Frank,的确,非常好谢谢你们两位,这两种解决方案都满足了我的需要。
df %>%
group_by(group, order) %>% # group the data
summarise(mean = mean(value)) %>% # summarise with mean per group & order
mutate(mean = lag(mean)) %>% # get the previous group's mean
right_join(df) # join to original data
# Source: local data frame [10 x 4]
# Groups: group [?]
#
# group order mean value
# (dbl) (dbl) (dbl) (dbl)
# 1 700 1 NA 10
# 2 700 1 NA 9
# 3 700 1 NA 3
# 4 700 2 7.333333 6
# 5 700 2 7.333333 4
# 6 700 2 7.333333 8
# 7 700 2 7.333333 5
# 8 700 2 7.333333 1
# 9 700 2 7.333333 2
# 10 700 2 7.333333 7