gpt4 book ai didi

r - 汇总按组返回长度

转载 作者:行者123 更新时间:2023-12-03 13:30:13 25 4
gpt4 key购买 nike

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

   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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com