gpt4 book ai didi

r - 如何使用 dplyr 计算第一个出现值的重复次数

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

我有一个基本看起来像这样的组的数据框

DF <- data.frame(state = c(rep("A", 3), rep("B",2), rep("A",2)))

DF
state
1 A
2 A
3 A
4 B
5 B
6 A
7 A

我的问题是如何计算第一个值在其第一个“ block ”中重复的连续行数。所以对于上面的 DF,结果应该是 3。第一个值可以出现任意次数,中间有其他值,或者它可能是唯一出现的值。以下天真的尝试通常会失败,因为它计算了第一个值的所有次出现。

DF %>% mutate(is_first = as.integer(state == first(state))) %>% 
summarize(count = sum(is_first))

本例中的结果是 5。因此,我们将不胜感激(最好是)dplyr 解决方案。

最佳答案

你可以试试:

rle(as.character(DF$state))$lengths[1]
[1] 3

在您的 dplyr 链中,它只是:

DF %>% summarize(count_first = rle(as.character(state))$lengths[1])

# count_first
# 1 3

或者对管道过于热心,使用 dplyrmagrittr:

library(dplyr)
library(magrittr)
DF %>% summarize(count_first = state %>%
as.character %>%
rle %$%
lengths %>%
first)

# count_first
# 1 3

也适用于分组数据:

DF <- data.frame(group = c(rep(1,4),rep(2,3)),state = c(rep("A", 3), rep("B",2), rep("A",2)))

# group state
# 1 1 A
# 2 1 A
# 3 1 A
# 4 1 B
# 5 2 B
# 6 2 A
# 7 2 A

DF %>% group_by(group) %>% summarize(count_first = rle(as.character(state))$lengths[1])

# # A tibble: 2 x 2
# group count_first
# <dbl> <int>
# 1 1 3
# 2 2 1

关于r - 如何使用 dplyr 计算第一个出现值的重复次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49842548/

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