对于列中的每个唯一值,查找最少4个日期

时间:2018-05-18 17:56:25

标签: r loops

我正在尝试为列中的每个唯一值找到最少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

2 个答案:

答案 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_nn=-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