确定组的值从“A”变为“B”的位置[R]

pdkcd3nj  于 2023-05-04  发布在  其他
关注(0)|答案(1)|浏览(89)

我有一个表data,它看起来像这样:

data <- data.frame(
  group_id = c(1234, 4567, 4567, 1234, 1710, 1710, 1710),
  value = c("A", "A", "A", "B", "A", "B", "A")
)

我想确定group_id中有多少个value从'A'更改为'B'。在某些情况下,可能会有多个值更改,例如1710,其中'A' -〉'B' -〉'A'。
理想情况下,我也会捕捉到这些变化,但我最感兴趣的是从“A”到“B”的变化。
我已经试过下面的,它可以告诉我的总数量的变化,但不是什么我感兴趣的了解。

data %>%
  arrange(desc(created_date)) %>%
  group_by(group_id) %>% 
  summarise(changes = sum(value != lag(value), na.rm = TRUE))
vhipe2zx

vhipe2zx1#

以下是我对这个问题的评论作为回答。
我注解掉了arrange,因为列created_date不在数据示例中。

suppressPackageStartupMessages(
  library(dplyr)
)

count_changes <- function(x, base = 'A') {
  sum(x == base & dplyr::lag(x, default = base) != base, na.rm = TRUE)
}

data %>%
  # arrange(desc(created_date)) %>%
  group_by(group_id) %>% 
  summarise(changes = count_changes(value))
#> # A tibble: 3 × 2
#>   group_id changes
#>      <dbl>   <int>
#> 1     1234       0
#> 2     1710       1
#> 3     4567       0

创建于2023-04-28带有reprex v2.0.2

相关问题