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] 删除。
我来说两句