我有以下数据,
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
现在我想按ID分组,找到value2的平均值和value1的最新值。在这个意义上的最新价值,我想得到最新日期的价值,即在这里我想获得每个ID的2016-04-24对应值的value1。我的输出应该是,
ID max_value1 mean_value2
1 2 2.5
2 4 6.5
以下是我正在使用的命令,
data %>% group_by(ID) %>% summarize(mean_value2 = mean(value2))
但我不知道如何做第一个。在dplyr中总结时,有人可以帮助我获得最新的value1值吗?
答案 0 :(得分:5)
一种方式如下。我的假设是ID
是一个约会对象。您想使用summarize
排列每个ID的日期顺序。然后,您按last()
对数据进行分组。在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
中,您可以使用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")
获取每个ID的最后一个值。
let avc = UIActivityViewController(activityItems: [image], applicationActivities: nil)
avc.completionWithItemsHandler = { (activity, success, items, error) in
print(success ? "SUCCESS!" : "FAILURE")
}
self.presentViewController(avc, animated: true, completion: nil)
DATA
{{1}}
答案 1 :(得分:2)
以下是data.table
library(data.table)
setDT(data)[, .(max_value1 = value1[which.max(date)],
mean_value2 = mean(value2)) , by = ID]
# ID max_value1 mean_value2
#1: 1 2 2.5
#2: 2 4 6.5
答案 2 :(得分:1)
您可以使用nth
中的dplyr
函数执行此操作,该函数会找到向量的第n个值。
data %>% group_by(ID) %>%
summarize(max_value1 = nth(value1, n = length(value1)), mean_value2 = mean(value2))
这是基于假设数据按日期排序,如示例所示;否则使用如上所述的安排。