在R中按组查找相邻列的行累积和的最大值

问题描述 投票:0回答:1

我有这个数据框。我想要找到的是每个组的行累积和的最大值,因为它们是相邻的并且值=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
r
1个回答
0
投票

我们可以编写一个函数,返回每组的最大行累积和。

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()
© www.soinside.com 2019 - 2024. All rights reserved.