r - 汇总按组返回长度

标签 r dplyr

我想在下面的数据框中添加新列,以计算每个月的最大干拼长度。
这是我的数据框的样子:

   day month year  rr spell spell1
     1     1 1981  0   dry      1
     2     1 1981  0   dry      1
     3     1 1981  0   dry      1
     4     1 1981  1.1 dry      0
     5     1 1981  0   dry      1
     6     1 1981  0   dry      1
     7     1 1981  0   dry      1
     8     1 1981  0   dry      1
     9     1 1981  2.7 dry      0
    10     1 1981  0   dry      1


这是我需要的输出:

 month year  spell_length
     1 1981      3
     1 1981      4
     1 1981      1


到目前为止,这是我所做的:

group_by(df, year, month, spell1) %>% 
    summarise(spell2 = sum(spell1, na.rm = TRUE))


结果如下:

  year month spell1 spell_length
  <int> <int>  <dbl>  <dbl>
1  1981     1      1     31
2  1981     2      0      0
3  1981     2      1     27
4  1981     3      0      0
5  1981     3      1     25
6  1981     4      0      0


数据

df <- read.table(h= T, text="day month year  rr spell spell1
1     1 1981  0   dry      1
2     1 1981  0   dry      1
3     1 1981  0   dry      1
4     1 1981  1.1 dry      0
5     1 1981  0   dry      1
6     1 1981  0   dry      1
7     1 1981  0   dry      1
8     1 1981  0   dry      1
9     1 1981  2.7 dry      0
10     1 1981  0   dry      1")

最佳答案

一种选择是按'spell'的'run-length-id'分组(rleid中的data.table-当该列中的值更改时创建新的分组ID),将filter包含'spell1'的行删除'为0,使用n()获取行数

library(dplyr)
library(data.table)
df1 %>%
    group_by(year, month, grp = rleid(spell1)) %>%
    filter(spell1 ==1) %>%
    summarise(spell_length = n()) %>%
    ungroup %>%
    select(-grp)
# A tibble: 3 x 3
#   year month spell_length
#  <int> <int>        <int>
#1  1981     1            3
#2  1981     1            4
#3  1981     1            1




或使用rle中的base R

rl1 <- rle(df1$spell1)
rl1$lengths[rl1$values > 0]
#[1] 3 4 1


注意:当'spell1'值不同时,此解决方案也适用

关于r - 汇总按组返回长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56073291/

相关文章:

linux - 使用 R/awk 打印文件中列的标准差

r - 更新输入并触发观察者内的操作按钮

r - 将 'observeEvent' 输出传递给操作按钮

r - 将除 1st 以外的所有列更改为美元格式

r - 为什么 lapply() 不保留我的 data.table 键?

r - 在 R CMD 检查期间忽略依赖项

r - 在 `dplyr` 中,当使用 `pivot_wide` 时,我想同时替换 'NA'

r - 有没有一种方法可以在将一个 data.frame 连接到另一个时替换匹配行上的列值?

r - 基于两个变量进行分组,包括它们各自的组合(例如 A - B 与 B - A 相同)

r - 拆分数据框值并放入 R 中的一组?