【发布时间】:2015-05-27 16:06:03
【问题描述】:
我有一个这样的数据框:
df <- data.frame(ID = c("A", "A", "B", "B", "C", "C"),
time = c(3.1,3.2,6.5,12.3, 3.2, 3.4),
intensity = c(10, 20, 30, 40, 50, 60))
|身份证号|时间|强度|
|:--|----:|---------:|
|一个 | 3.1| 10|
|一个 | 3.2| 20|
|B | 6.5| 30|
|B | 12.3| 40|
|C | 3.2| 50|
|C | 3.4| 60|
我只想在时差小于 0.3 时按 ID 聚合值(总强度)。首先我计算了这个时间差:
df.2 <- df %>%
group_by(ID) %>%
mutate(time.diff = max(time) - min(time))
...导致:
|身份证号|时间|强度|时间.diff| |:--|----:|---------:|---------:| |一个 | 3.1| 10| 0.1| |一个 | 3.2| 20| 0.1| |B | 6.5| 30| 5.8| |B | 12.3| 40| 5.8| |C | 3.2| 50| 0.2| |C | 3.4| 60| 0.2|为了清楚起见,我希望得到的输出是:
|身份证号|时间|强度|时间.diff| |:--|----:|---------:|---------:| |一个 | 3.15| 30| 0.1| |B | 6.5| 30| 5.8| |B | 12.3| 40| 5.8| |C | 3.3| 110| 0.2|现在时间是综合观察的平均值,强度是它们的总和。 ID“B”保留两个观测值,因为它的时间差大于 0.3。我已经尝试过使用 dplyr,但 summarise 总是会删除“B”的观察结果之一,我想保留它们,但我不知道如何进行 条件 em> _group_by_。
感谢您的任何想法!
【问题讨论】: