gpt4 book ai didi

r - 找到运行时间最长的不间断系列

转载 作者:行者123 更新时间:2023-12-02 07:20:23 25 4
gpt4 key购买 nike

假设我有一个这样构建的数据框:

library(lubridate)

seq_date <- rep(seq.Date(from = dmy('01-01-2016'), to = dmy('05-01-2016'), by = 'day'), 3)

vec_a <- c(rep('a', 3), NA, 'a')
vec_b <- c(rep('b', 4), NA)
vec_c <- c(NA, rep('c', 2), NA, 'c')

demo_df <- data.frame(date = seq_date,
var = c(vec_a, vec_b, vec_c))

demo_df
date var
1 2016-01-01 a
2 2016-01-02 a
3 2016-01-03 a
4 2016-01-04 <NA>
5 2016-01-05 a
6 2016-01-01 b
7 2016-01-02 b
8 2016-01-03 b
9 2016-01-04 b
10 2016-01-05 <NA>
11 2016-01-01 <NA>
12 2016-01-02 c
13 2016-01-03 c
14 2016-01-04 <NA>
15 2016-01-05 c

我想知道的是每个var 运行时间最长的不间断序列。预期的输出应该是这样的:

a 3
b 4
c 2

var 中的三个类别中的每一个都在同一日期开始和结束,并且一个系列总是会被 NA 打断。任何帮助将不胜感激。

最佳答案

我们可以使用 data.table 中的 rleid。将 'data.frame' 转换为 'data.table' (setDT(demo_df)),按 'var' 和 'var' 的非 NA 元素的 run-length-id 分组,获取计数 (.N),然后使用第二个 [],按“var”分组,获取指定“i”的 max is.na 或在 max

中使用 na.rm=TRUE
library(data.table)
setDT(demo_df)[, .N, .(var, rleid(!is.na(var)))][!is.na(var), .(count = max(N)), var]
# var count
#1: a 3
#2: b 4
#3: c 2

如果我们需要一个dplyr解决方案

library(dplyr)
demo_df %>%
count(grp = cumsum(is.na(var)), var) %>%
filter(!is.na(var)) %>%
group_by(var) %>%
summarise(Count = max(n))

关于r - 找到运行时间最长的不间断系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47630008/

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