在dplyr中总结日期的最大值 - R.

hai*_*men 4 r dplyr

我有以下数据,

data

date           ID       value1        value2
2016-04-03     1          0              1
2016-04-10     1          6              2
2016-04-17     1          7              3
2016-04-24     1          2              4
2016-04-03     2          1              5
2016-04-10     2          5              6
2016-04-17     2          9              7
2016-04-24     2          4              8
Run Code Online (Sandbox Code Playgroud)

现在我想按ID分组,找到value2的平均值和value1的最新值.在这个意义上的最新价值,我想得到最新日期的价值,即在这里我想得到每个ID的2016-04-24对应值的value1.我的输出应该是,

ID       max_value1      mean_value2
1             2              2.5
2             4              6.5 
Run Code Online (Sandbox Code Playgroud)

以下是我正在使用的命令,

data %>% group_by(ID) %>% summarize(mean_value2 = mean(value2))
Run Code Online (Sandbox Code Playgroud)

但我不知道如何做第一个.在dplyr中总结时,有人可以帮助我获得最新的value1值吗?

jaz*_*rro 5

一种方法是以下.我的假设是这date是一个约会对象.您想使用安排每个ID的日期顺序arrange.然后,按以下方式对数据进行分组ID.在summarize,您可以使用last()为每个ID获取最后一个值1.

arrange(data,ID,date) %>%
group_by(ID) %>%
summarize(mean_value2 = mean(value2), max_value1 = last(value1))

#     ID mean_value2 max_value1
#  <int>       <dbl>      <int>
#1     1         2.5          2
#2     2         6.5          4
Run Code Online (Sandbox Code Playgroud)

数据

data <- structure(list(date = structure(c(16894, 16901, 16908, 16915, 
16894, 16901, 16908, 16915), class = "Date"), ID = c(1L, 1L, 
1L, 1L, 2L, 2L, 2L, 2L), value1 = c(0L, 6L, 7L, 2L, 1L, 5L, 9L, 
4L), value2 = 1:8), .Names = c("date", "ID", "value1", "value2"
), row.names = c(NA, -8L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)

  • 如果没有安排,你可以交替做`value1 [which.max(date)]`,虽然那不是很明显. (3认同)