r - 计算 r 中值组合的出现次数
问题描述
我正在处理有关不同案件的数据,这些案件在一段时间内经历了由不同案件组成的过程。每个案例都有一个唯一的 ID 号。一个过程可以以多个 fase 开始,并以 fase “Finished”结束(除了仍在进行的 fase)。一个案件可以经历多次。数据与此类似:
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 解决方案。
解决方案
我们可以ave
使用base R
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)]
推荐阅读
- jquery - 如何获得闪烁的光标而不是选择
- spring - 如何使用spring boot加载图像列表并在html中显示
- php - 我无法理解 SOLID 原则
- rest - REST API 设计:做,然后撤消
- javascript - 记录来自 Puppeteer Node.js 进程的客户端代码中的“控制台”调用
- php - Laravel mysql加入问题
- c - C - 指向字符串数组的指针不起作用
- arrays - PyPNG 无法使用 32 位数组输入制作图像
- mapbox - 在 Mapbox GL JS 中覆盖 GeoTIF 的主要问题
- variables - 应该知道哪些 Cmake 变量的含义?