gpt4 book ai didi

r - 计数器最大频率非连续数

转载 作者:行者123 更新时间:2023-12-04 09:41:37 26 4
gpt4 key购买 nike

我有一些数据,其中一个变量是有一些要求的会计师。我现在需要知道的是,每个 ID 计数器达到 1 的次数是多少,如果连续有几个 1,则只需计算 1。

例如,假设 ID 有计数器:1, 0, 0, 1, 1, 0, 0, 1,1,1,0,0。我不得不说 id 有 3 个频率。

Frec_counter 计算 1. 出现的非连续次数。如果有连续的 1,则最后一个编号。

我的数据:

    id <- c(10,10,10,10,10,11,11,11,11,11,11,12,12,12,13, 13, 15, 14)
counter <- c(0,0,1,1,0,1,0,1,0,1,1,1,1,1,0,0,1,1)
DF <- data.frame(id, counter); DF

Id 10 有 0,0,1,1,0。

5条数据,但只有1条不连续,所以设置为frec_counter 0,0,0,1,0

我想要的输出:
id <- c(10,10,10,10,10,11,11,11,11,11,11,12,12,12,13, 13, 15, 14)
counter <- c(0,0,1,1,0,1,0,1,0,1,1,1,1,1,0,0,1,1)
frec_counter <- c(0,0,0,1,0,1,0,2,0,0,3,0,0,1,0,0,1,1)
max_counter <- c(1,1,1,1,1,3,3,3,3,3,3,1,1,1,0,0,1,1)
DF <- data.frame(id, counter, frec_counter, max_counter); DF

最佳答案

您的数据:

id <- c(10,10,10,10,10,11,11,11,11,11,11,12,12,12,13, 13, 15, 14)
counter <- c(0,0,1,1,0,1,0,1,0,1,1,1,1,1,0,0,1,1)
DF <- data.frame(id, counter)

id counter
1 10 0
2 10 0
3 10 1
4 10 1
5 10 0
6 11 1
7 11 0
8 11 1
9 11 0
10 11 1
11 11 1
12 12 1
13 12 1
14 12 1
15 13 0
16 13 0
17 15 1
18 14 1

如果你想要的只是最后的计数,我们可以在基础 R 中做到这一点:
counts <- with(DF, split(counter, id))
lengths <- lapply(counts, rle)
final <- lapply(lengths, function(x) sum(x$values == 1))

$`10`
[1] 1

$`11`
[1] 3

$`12`
[1] 1

$`13`
[1] 0

$`14`
[1] 1

$`15`
[1] 1

但是由于您特别想要一个带有中间“标志”的数据框, tidyverse 一组包效果更好:
library(tidyverse)

df.new <- DF %>%
group_by(id) %>%
mutate(
frec_counter = counter == 1 & (is.na(lead(counter)) | lead(counter == 0)),
frec_counter = as.numeric(frec_counter),
max_counter = sum(frec_counter)
)

# A tibble: 18 x 4
# Groups: id [6]
id counter frec_counter max_counter
<dbl> <dbl> <dbl> <dbl>
1 10 0 0 1
2 10 0 0 1
3 10 1 0 1
4 10 1 1 1
5 10 0 0 1
6 11 1 1 3
7 11 0 0 3
8 11 1 1 3
9 11 0 0 3
10 11 1 0 3
11 11 1 1 3
12 12 1 0 1
13 12 1 0 1
14 12 1 1 1
15 13 0 0 0
16 13 0 0 0
17 15 1 1 1
18 14 1 1 1

关于r - 计数器最大频率非连续数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55631303/

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