gpt4 book ai didi

r - 计算 r 中值组合的出现次数

转载 作者:行者123 更新时间:2023-12-01 11:15:04 26 4
gpt4 key购买 nike

我正在处理有关不同案例的数据,这些案例在特定时间段内经历了由不同阶段组成的过程。每个案例都有一个唯一的 ID 号。一个过程可以从多个阶段开始,并以“已完成”阶段结束(除了仍未进行的阶段)。一个案例可以经历多次流程。数据看起来类似于:

library(dplyr)
df1 <- structure(list(id = c("1", "1", "2", "2", "2", "2", "3", "3",
"3", "3", "3", "3", "3", "3", "3", "3"), time = structure(c(17453,
17458, 17453, 17462, 17727, 17735, 17453, 17484, 17568, 17665,
17665, 17709, 17727, 17727, 17757, 17819), class = "Date"), old_fase =
c(NA, "Fase 1", NA, "Fase 1", "Finished", "Fase 1", NA, "Fase 1", "Fase 2A",
"Finished", "Fase 2A", "Fase 2B", "Finished", "Fase 2B", "Fase 1",
"Fase 2A"), new_fase = c("Fase 1", "Finished", "Fase 1", "Finished",
"Fase 1", "Finished", "Fase 1", "Fase 2A", "Finished", "Fase 2A",
"Fase 2B", "Finished", "Fase 2B", "Fase 1", "Fase 2A", "Fase 2B"
)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -16L))

对于我的分析,我想根据每个 id 的每个进程的出现创建一个新的 id。在“id”和“new_fase”上使用 group_by 和 mutate 会创建以下不正确的解决方案。这是因为第 11 行中第一次出现“Fase 2B”。

df1 %>% 
group_by(id,new_fase) %>%
mutate(occurrence=row_number())

正确的解决方案应该是这样的:

df1 %>% 
mutate(occurrence = c(rep(1, 4), 2, 2, rep(1, 3), rep(2, 3), rep(3, 4)))

我尝试了多种方法并阅读了多篇 Stackoverflow 帖子,但我无法正确理解。感谢任何帮助,最好使用 tidyverse 解决方案。

最佳答案

我们可以使用base R中的ave

df2$occurrence <- with(df2, ave(seq_along(id), id, fase, FUN = seq_along))

或者用data.table

library(data.table)
setDT(df2)[, occurrence := seq_len(.N), .(id, fase)]

关于r - 计算 r 中值组合的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53103836/

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