[英]Find average by group over a time period and retrieve last date for same period
[英]average for time period dependent on date of row
我有一個日期列表,每個日期都有一個值。
這就是我的數據框現在的樣子。 請注意,日期可以重復,但是值的輸入也將重復相同的值(即第2行和第3行具有相同的日期,但是各自的值也相同)。
date value
1 2018-02-08 1
2 2018-02-09 2
3 2018-02-09 2
4 2018-02-10 4
... ...
這就是我希望數據框看起來像的樣子
date value weekavg
1 2018-02-08 1 ...
2 2018-02-09 2 ...
3 2018-02-09 2 ...
4 2018-02-10 4 ...
5 2018-02-11 0 ...
6 2018-02-12 0 ...
7 2018-02-13 0 ...
8 2018-02-14 0 ...
9 2018-02-15 0 1
... ... ...
為了澄清起見,第九行中的條目是通過查找一周之前發生的日期來計算的,因此對於2018-02-15而言,這將是2018-02-08至2018-02-13的日期范圍。 因此,由於1 + 2 + 4 + 0 + 0 + 0 + 0 = 7,結果為1。我該如何在R中進行此操作,然后對每一行進行處理?
------可復制的示例-----
數據
lines <- "date value
1 2018-02-08 NA
2 2018-02-08 NA
3 2018-02-09 NA
4 2018-02-10 295
5 2018-02-10 295
6 2018-02-11 329
7 2018-02-12 242
8 2018-02-12 242
9 2018-02-13 317
10 2018-02-14 341
11 2018-02-15 292
12 2018-02-16 363
13 2018-02-17 380
14 2018-02-18 319
15 2018-02-19 307
16 2018-02-20 328
17 2018-02-21 290"
df <- read.table(text = lines)
newDF <- merge(df, transform(unique(df), mean = rollmeanr(value, 7, fill = NA)))
平均值欄對我來說只是NA。
PS道歉的圖像評論,我不知道。 非常感謝您的幫助。
該問題並未完全定義輸出,而是假設:
然后:
library(zoo)
merge(DF, transform(unique(DF), mean = rollmeanr(value, 7, fill = NA)))
對於注釋中可重復顯示的示例數據,得出:
date value mean
1 2018-02-08 1 NA
2 2018-02-09 2 NA
3 2018-02-09 2 NA
4 2018-02-10 4 NA
5 2018-02-11 0 NA
6 2018-02-12 0 NA
7 2018-02-13 0 NA
8 2018-02-14 0 1.0000000
9 2018-02-15 0 0.8571429
Lines <- "
date value
1 2018-02-08 1
2 2018-02-09 2
3 2018-02-09 2
4 2018-02-10 4
5 2018-02-11 0
6 2018-02-12 0
7 2018-02-13 0
8 2018-02-14 0
9 2018-02-15 0
"
DF <- read.table(text = Lines)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.