我正在尝试为列中的每个唯一值找到最少4个日期,并取这些4的平均值。
例如
ID Date Value
aa1 1/1/2006 5
aa1 2/1/2007 4
aa1 3/2/2005 7
aa1 1/20/1998 10
aa1 5/3/2001 9
aa1 7/4/2010 10
aa2n 4/3/2002 5
aa2n 4/5/2002 6
aa2n 6/30/2011 7
aa2n 6/21/2012 5
aa2n 1/5/1998 3
我想输出
ID Avg Value
aa1 7.75
aa2n 5.25
答案 0 :(得分:2)
我们将'日期转换为'到Date
课程,arrange
到'日期'并获得前4' Value'的mean
按' ID'
library(dplyr)
library(lubridate)
df1 %>%
group_by(ID) %>%
arrange(mdy(Date)) %>%
summarise(Value = mean(head(Value, 4)))
# A tibble: 2 x 2
# ID Value
# <chr> <dbl>
#1 aa1 7.75
#2 aa2n 5.25
或者我们可以使用data.table
library(data.table)
setDT(df1)[order(mdy(Date)),.(Value = mean(head(Value, 4))), ID]
# ID Value
#1: aa2n 5.25
#2: aa1 7.75
答案 1 :(得分:2)
您可以dplyr::top_n
与n=-4
一起使用,以选择最少4个日期的记录。使用dplyr::summarise
计算mean
的{{1}}。
Value
数据:强>
library(dplyr)
library(lubridate)
df %>% mutate(Date = mdy(Date)) %>%
group_by(ID) %>%
top_n(-4, Date) %>% #Last 4 records, ordered by Date
summarise(AvgVal = mean(Value))
# A tibble: 2 x 2
# ID AvgVal
# <chr> <dbl>
#1 aa1 7.75
#2 aa2n 5.25