【发布时间】:2017-12-21 16:49:23
【问题描述】:
我在多列上使用 group_by() 时遇到问题。示例数据集如下:
dput(test)
structure(list(timestamp = structure(c(1506676980, 1506676980,
1506676980, 1506677040, 1506677280, 1506677340, 1506677460), class = c("POSIXct",
"POSIXt"), tzone = "UTC"), plusminus = c(-1, 1, 1, 1, 1, 1, -1
), AP = structure(c(1L, 2L, 2L, 2L, 2L, 1L, 2L), .Label = c("A",
"B"), class = "factor")), .Names = c("timestamp", "plusminus",
"AP"), row.names = c(NA, -7L), class = "data.frame")
如下所示:
timestamp plusminus AP
1 2017-09-29 09:23:00 -1 A
2 2017-09-29 09:23:00 1 B
3 2017-09-29 09:23:00 1 B
4 2017-09-29 09:24:00 1 B
5 2017-09-29 09:28:00 1 B
6 2017-09-29 09:29:00 1 A
7 2017-09-29 09:31:00 -1 B
我想做以下事情:
- 计算“AP”变量中每个级别的运行总计
- 汇总每分钟运行总计的最大值。
换句话说,我想要这个输出:
timestamp total AP
1 2017-09-29 09:23:00 -1 A
2 2017-09-29 09:23:00 2 B
3 2017-09-29 09:24:00 3 B
4 2017-09-29 09:28:00 4 B
5 2017-09-29 09:29:00 0 A
6 2017-09-29 09:31:00 3 B
第 1 部分很容易通过:
test %>% group_by(AP) %>% mutate(total = cumsum(plusminus))
给出:
# A tibble: 7 x 4
# Groups: AP [2]
timestamp plusminus AP total
<dttm> <dbl> <fctr> <dbl>
1 2017-09-29 09:23:00 -1 A -1
2 2017-09-29 09:23:00 1 B 1
3 2017-09-29 09:23:00 1 B 2
4 2017-09-29 09:24:00 1 B 3
5 2017-09-29 09:28:00 1 B 4
6 2017-09-29 09:29:00 1 A 0
7 2017-09-29 09:31:00 -1 B 3
但我不确定如何执行第 2 部分。也就是说,我想知道如何执行聚合,以便后一个数据帧中的第二行被压制以提供所需的输出。
【问题讨论】: