我有这个数据框架.我想找到的是每个组相邻且值=1的最大行累积和.例如,组1相邻有第1、2、3、4年,并且值加起来=4,而第6年=1,因此组1的最大值为4,等等.下面是数据帧的示例和所需的结果.谢谢你

enter image description here

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

推荐答案

没有自定义功能的tidyverse解决方案:

library(tidyverse)
# ----------------

df %>%
  pivot_longer(starts_with("Year")) %>% 
  mutate(id = consecutive_id(group, value)) %>% 
  add_count(group, id) %>% 
  filter(value == 1) %>% 
  summarise(.by = c(group), value = max(n))

输出:

# A tibble: 6 × 2
  group value
  <int> <int>
1     1     4
2     2     3
3     3     2
4     4     1
5     5     4
6     6     3

如果您愿意,您可以从1和0中获取值:

df %>%
  pivot_longer(starts_with("Year")) %>% 
  mutate(id = consecutive_id(group, value)) %>% 
  add_count(group, id) %>% 
  summarise(.by = c(group, value), n_value = max(n)) %>% 
  pivot_wider(names_from = value, values_from = n_value, names_prefix = "val_")

# Output for both values 
# A tibble: 6 × 3
  group val_1 val_0
  <int> <int> <int>
1     1     4     1
2     2     3     2
3     3     2     1
4     4     1     4
5     5     4     1
6     6     3     1

或者,使用purrr::map_intrle:

df$value <- map_int(
  df$group,
  \(x) max( rle(df[x, -1])$lengths[ rle(df[x, -1])$values == 1 ] ))

# Output
> df[, c("group", "value")]
  group value
1     1     4
2     2     3
3     3     2
4     4     1
5     5     4
6     6     3

R相关问答推荐

将Multilinetring合并到一个线串中,使用sf生成规则间隔的点

将模拟变量乘以多个观测结果中的模拟变量

r中的stat_difference函数不起作用

获取列中值更改的行号

未识别时区

如何自定义3D散点图的图例顺序?

提取一个列表中单个列的重复观察结果R

根据类别合并(汇总)某些行

如何删除仅在数据集顶部和底部包含零的行

如何在ggplot2中绘制具有特定 colored颜色 的连续色轮

过滤名称以特定字符串开头的文件

Geom_Hline将不会出现,而它以前出现了

自定义gggraph,使geom_abline图层仅在沿x轴的特定范围内显示

R+reprex:在呈现R标记文件时创建可重现的示例

如何在R中使用hmm TMB提前一步预测观察到的状态?

在使用具有Bray-Curtis相似性的pvCluust时计算p值

使用列中的值来调用函数调用中应使用的其他列

计算Mean by分组和绑定到R中的数据集

R:如何在数据集中使用Apply

如何使用ggsurvfit包更改风险表中的标签名称?