我有以下data.frame
df
id name strength days date
1 a 10 20 10
1 a 10 30 11
1 a 10 10 12
1 a 5 20 14
1 a 5 10 15
1 a 10 20 16
2 b 10 15 09...
我需要找到每组id
连续使用名称和力量组合的天数总和。例如。预期结果
id name strength sumOfDays
1 a 10 60
1 a 5 30
1 a 10 20
我正在尝试min_rank
使用相同的内容:
y <- df %>%
group_by(id, name) %>%
mutate(group = min_rank(strength ))
这给了我一个不需要的分组(逻辑正确),因为它将所有a-10组合在一起,但不考虑日期的排序:
df
id name strength group
1 a 10 3
1 a 10 3
1 a 10 3
1 a 5 1
1 a 5 1
1 a 10 3
2 b 10 1...
答案 0 :(得分:3)
我们可以使用rleid
中的data.table
函数创建用于分组的列。
library(dplyr)
library(data.table)
dat2 <- dat %>%
group_by(id, name, strength, Group = rleid(strength)) %>%
summarise(sumOfDays = sum(days)) %>%
ungroup() %>%
arrange(id, Group) %>%
select(-Group)
dat2
# # A tibble: 4 x 4
# id name strength sumOfDays
# <int> <chr> <int> <int>
# 1 1 a 10 60
# 2 1 a 5 30
# 3 1 a 10 20
# 4 2 b 10 15
数据强>
dat <- read.table(text = "id name strength days date
1 a 10 20 10
1 a 10 30 11
1 a 10 10 12
1 a 5 20 14
1 a 5 10 15
1 a 10 20 16
2 b 10 15 09",
header = TRUE, stringsAsFactors = FALSE)
答案 1 :(得分:1)
以下是包含 "h_ello", "how're", "@list"
和base R
rle
版本
aggregate