使用groupby和可变窗口长度的滚动平均
我正试图创建一个基于ID列和R中的度量时间标签的列的滚动平均值,但是我遇到了很多麻烦 以下是我的数据框的外观:使用groupby和可变窗口长度的滚动平均,r,rolling-computation,R,Rolling Computation,我正试图创建一个基于ID列和R中的度量时间标签的列的滚动平均值,但是我遇到了很多麻烦 以下是我的数据框的外观: ID Measurement Value A 1 10 A 2 12 A 3 14 B 1 10 B 2 12 B 3 14 B 4 10 问题是每个ID的测量计数从9到76不等,因此我没有找到
ID Measurement Value
A 1 10
A 2 12
A 3 14
B 1 10
B 2 12
B 3 14
B 4 10
问题是每个ID的测量计数从9到76不等,因此我没有找到一个解决方案,在处理不同的窗口长度时,为每个ID创建一列滚动平均值
我的目标是这样的数据框架:
ID Measurement Value Average
A 1 10 NA
A 2 12 11
A 3 14 12
B 1 10 NA
B 2 12 11
B 3 14 12
B 4 10 11.5
使用您的数据:
library(dplyr)
dat %>%
group_by(Id) %>%
mutate(Avrg = cumsum(Value)/(1:n()))
# A tibble: 7 x 4
# Groups: Id [2]
Id Measurement Value Avrg
<chr> <int> <int> <dbl>
1 A 1 10 10
2 A 2 12 11
3 A 3 14 12
4 B 1 10 10
5 B 2 12 11
6 B 3 14 12
7 B 4 10 11.5
另外,我很确定10的平均值是10,而不是NA
library(dplyr)
data %>%
group_by(ID) %>%
mutate(rolling_mean = cummean(Value))
第一行将是每个组(ID)的第一个值的平均值,而不是NA。这不使用包。它按ID计算累积平均值,但对于
测量值
等于1的情况,它强制平均值为NA
transform(DF, Avg = ave(Value, ID, FUN = cumsum) /
ifelse(Measurement == 1, NA, Measurement))
给予:
ID Measurement Value Avg
1 A 1 10 NA
2 A 2 12 11.0
3 A 3 14 12.0
4 B 1 10 NA
5 B 2 12 11.0
6 B 3 14 12.0
7 B 4 10 11.5
注
可复制形式的输入DF
:
Lines <- "ID Measurement Value
A 1 10
A 2 12
A 3 14
B 1 10
B 2 12
B 3 14
B 4 10"
DF <- read.table(text = Lines, header = TRUE, strip.white = TRUE, as.is = TRUE)
行有价值的答案,面临同样的问题
Lines <- "ID Measurement Value
A 1 10
A 2 12
A 3 14
B 1 10
B 2 12
B 3 14
B 4 10"
DF <- read.table(text = Lines, header = TRUE, strip.white = TRUE, as.is = TRUE)