我有这个数据框。我想要找到的是每个组的行累积和的最大值,因为它们是相邻的并且值=1。例如,组 1 具有相邻的年份 1、2、3、4,值加起来 = 4,而年份 6 = 1,因此组 1 的最大值为 4,依此类推。以下是数据框和所需结果的示例。谢谢你
df <- data.frame(group = c(1:6),
Year1 = c('1','0','0','0','0','0'),
Year2 = c('1','1','1','0','1','1'),
Year3 = c('1','1','0','0','1','0'),
Year4 = c('1','1','1','0','1','1'),
Year5 = c('0','0','1','1','1','1'),
Year6 = c('1','0','0','0','0','1'))
df
group Year1 Year2 Year3 Year4 Year5 Year6
1 1 1 1 1 1 0 1
2 2 0 1 1 1 0 0
3 3 0 1 0 1 1 0
4 4 0 0 0 0 1 0
5 5 0 1 1 1 1 0
6 6 0 1 0 1 1 1
result <- data.frame(group=c(1:6), value = c(4, 3, 2, 1, 4, 3))
result
group value
1 1 4
2 2 3
3 3 2
4 4 1
5 5 4
6 6 3
我们可以编写一个函数,返回每组的最大行累积和。
get_max_length <- function(x) {
rl <- rle(x)
max(rl$lengths[rl$values == 1])
}
现在我们可以对每一行应用这个函数。
在基础 R 中,使用
apply
cbind(df[1], value = apply(df[-1], 1, get_max_length))
# group value
#1 1 4
#2 2 3
#3 3 2
#4 4 1
#5 5 4
#6 6 3
或与
dplyr
rowwise
:
library(dplyr)
df %>%
rowwise() %>%
transmute(group,
value = get_max_length(c_across(starts_with("Year")))) %>%
ungroup()