dplyr 唯一条目的运行计数

迪伦罗素
df <- readr::read_table("
date        caseID  subjectID   yr
2018-12-12  47582   000c15d0    4   
2018-12-12  47582   000c15d0    4   
2018-12-12  47584   000c15d0    4   
2018-12-12  47591   000c15d0    4   
2018-12-12  47594   000c15d0    4   
2018-12-12  47610   000c15d0    4   
2016-02-25  5222    0038263c    4   
2016-02-25  5222    0038263c    4   
2016-02-25  5223    0038263c    4   
2016-02-25  5223    0038263c    4")

给定上面的数据框,我需要创建一个列n_tot来创建每个条目的总条目数的运行计数subjectID和一个n_case所有唯一caseID条目的运行计数的结果想:

date        caseID subjectID   yr n_tot n_case
2018-12-12  47582   000c15d0    4     1      1
2018-12-12  47582   000c15d0    4     2      1
2018-12-12  47584   000c15d0    4     3      2
2018-12-12  47591   000c15d0    4     4      3
2018-12-12  47594   000c15d0    4     5      4
2018-12-12  47610   000c15d0    4     6      5
2016-02-25  5222    0038263c    4     1      1
2016-02-25  5222    0038263c    4     2      1
2016-02-25  5223    0038263c    4     3      2
2016-02-25  5223    0038263c    4     4      2

我有代码:

df %>%
  dplyr::group_by(subjectID, yr) %>%
  dplyr::arrange(date, caseID, .by_group = TRUE) %>%
  dplyr::mutate(n_case = dplyr::n_distinct(caseID)) %>%
  dplyr::ungroup(caseID) %>%
  dplyr::mutate(n_tot = seq(dplyr::n())) %>%
  dplyr::select(date, caseID, subjectID, yr, n_tot, n_case)

但这正在产生:

date       caseID   subjectID  yr n_tot n_case
2018-12-12  47582   000c15d0    4     1      5
2018-12-12  47582   000c15d0    4     2      5
2018-12-12  47584   000c15d0    4     3      5
2018-12-12  47591   000c15d0    4     4      5
2018-12-12  47594   000c15d0    3     5      5
2018-12-12  47610   000c15d0    4     6      5
2016-02-25  5222    0038263c    4     1      2
2016-02-25  5222    0038263c    4     2      2
2016-02-25  5223    0038263c    4     3      2
2016-02-25  5223    0038263c    4     4      2

我尝试了各种选项(例如seq(n_distinct(caseID)),但我无法得到任何东西来产生所需的结果。

弗里克先生

这似乎给出了你所追求的结果

df %>%
  group_by(subjectID) %>% 
  mutate(
    n_tot = row_number(),
    n_case=cumsum(!duplicated(caseID))
  )

我们duplicated用来查看案例 ID 是否是新的,然后使用它cumsum()来获取新案例的运行计数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章