每次医生就诊时用行计算数据中曾经经历过这种情况的人数
Count people ever experiencing condition in data with row per doctor's visit
我是 R 的新手,如果这个问题已经得到解答,我深表歉意,但我无法找到它,因为我不知道要搜索什么。
我有一个非常大的与健康相关的数据集,其中有一行表示在某个特定时间段内发生的每位医生的就诊。数据集中的变量之一是患者 ID。很明显,数据集中存在大量重复的患者 ID——我有大约 50 万个唯一患者 ID 和大约 900 万个观察值。数据中的其他变量是疾病 A、疾病 B 和疾病 C。其中每一个都是 0 或 1--0,表示患者在就诊时没有患病,而 1 表示他们确实患病。最后一个重要变量是 race/ethnicity.
我最终想要的是:
- 一种计算就诊期间曾患过每种疾病的患者人数的方法。因此,例如,如果在患者 ID == 1 的任何观察中疾病 A 为 1,则该患者将被视为曾经患有疾病 A。
- 在曾经患过每种疾病的人中,有一种方法可以计算他们因这种疾病去看医生的次数,这样我就可以比较平均次数是否因 race/ethnicity 变量而不同。
我完全不知道如何做到这两点。也许使用 group_by 并一起总结?我想知道是否有与 reshape 包相关的解决方案可以帮助实现第二个目标。不过,我对 R 还不够熟悉,无法深入了解,所以我希望得到一些帮助。
以下是一些与实际数据具有相似特征的示例数据:
structure(list(patient_id = c(2L, 1L, 1L, 1L, 4L, 1L, 2L, 5L,
5L, 1L, 2L, 1L, 2L, 4L, 5L, 2L, 4L, 2L, 1L, 3L, 3L, 1L, 2L, 1L,
4L, 5L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 3L, 3L, 3L, 1L, 3L, 3L, 4L,
4L, 1L, 2L, 5L, 5L, 2L, 2L, 2L, 1L, 2L, 2L, 4L, 1L, 3L, 2L, 5L,
4L, 3L, 3L, 1L, 2L, 1L, 2L, 5L, 5L, 4L, 4L, 4L, 4L, 4L, 2L, 4L,
4L, 3L, 4L, 5L, 4L, 3L, 4L, 5L, 1L, 5L, 4L, 1L, 3L, 1L, 1L, 3L,
5L, 2L), diseaseA = c(1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0,
1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1), diseaseB = c(0, 1,
0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0,
0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0,
1, 0, 1, 0), diseaseC = c(0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1,
1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0,
1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0,
1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1,
0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0), raceeth = structure(c(2L,
2L, 2L, 2L, 3L, 2L, 2L, 3L, 3L, 2L, 2L, 2L, 2L, 3L, 3L, 2L, 3L,
2L, 2L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
1L, 1L, 1L, 2L, 1L, 1L, 3L, 3L, 2L, 2L, 3L, 3L, 2L, 2L, 2L, 2L,
2L, 2L, 3L, 2L, 1L, 2L, 3L, 3L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 2L, 3L, 3L, 1L, 3L, 3L, 3L, 1L, 3L, 3L, 2L,
3L, 3L, 2L, 1L, 2L, 2L, 1L, 3L, 2L), .Label = c("Hispanic", "NH White",
"NH Black"), class = "factor")), row.names = c(NA, 90L), class = "data.frame")
如果我可以提供任何额外的信息,请告诉我。
我计算了每位患者的疾病(我认为患者坚持他们的种族,这就是为什么按 patient_id 和种族分组应该没问题,我按两个变量分组,因为我需要保留种族列还有)
library(dplyr)
df2 <- df %>%
group_by(patient_id,raceeth) %>%
summarise_all(sum) %>%
ungroup
df2
输出;
patient_id raceeth diseaseA diseaseB diseaseC
<int> <fct> <dbl> <dbl> <dbl>
1 1 NH White 12 8 11
2 2 NH White 11 11 10
3 3 Hispanic 6 4 7
4 4 NH Black 12 8 8
5 5 NH Black 3 8 6
现在我可以计算每个种族组的平均值;
df3 <- df2 %>%
select(-patient_id) %>%
group_by(raceeth) %>%
summarise_all(mean)%>%
ungroup
df3
输出;
raceeth diseaseA diseaseB diseaseC
<fct> <dbl> <dbl> <dbl>
1 Hispanic 6 4 7
2 NH White 11.5 9.5 10.5
3 NH Black 7.5 8 7
我是 R 的新手,如果这个问题已经得到解答,我深表歉意,但我无法找到它,因为我不知道要搜索什么。
我有一个非常大的与健康相关的数据集,其中有一行表示在某个特定时间段内发生的每位医生的就诊。数据集中的变量之一是患者 ID。很明显,数据集中存在大量重复的患者 ID——我有大约 50 万个唯一患者 ID 和大约 900 万个观察值。数据中的其他变量是疾病 A、疾病 B 和疾病 C。其中每一个都是 0 或 1--0,表示患者在就诊时没有患病,而 1 表示他们确实患病。最后一个重要变量是 race/ethnicity.
我最终想要的是:
- 一种计算就诊期间曾患过每种疾病的患者人数的方法。因此,例如,如果在患者 ID == 1 的任何观察中疾病 A 为 1,则该患者将被视为曾经患有疾病 A。
- 在曾经患过每种疾病的人中,有一种方法可以计算他们因这种疾病去看医生的次数,这样我就可以比较平均次数是否因 race/ethnicity 变量而不同。
我完全不知道如何做到这两点。也许使用 group_by 并一起总结?我想知道是否有与 reshape 包相关的解决方案可以帮助实现第二个目标。不过,我对 R 还不够熟悉,无法深入了解,所以我希望得到一些帮助。
以下是一些与实际数据具有相似特征的示例数据:
structure(list(patient_id = c(2L, 1L, 1L, 1L, 4L, 1L, 2L, 5L,
5L, 1L, 2L, 1L, 2L, 4L, 5L, 2L, 4L, 2L, 1L, 3L, 3L, 1L, 2L, 1L,
4L, 5L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 3L, 3L, 3L, 1L, 3L, 3L, 4L,
4L, 1L, 2L, 5L, 5L, 2L, 2L, 2L, 1L, 2L, 2L, 4L, 1L, 3L, 2L, 5L,
4L, 3L, 3L, 1L, 2L, 1L, 2L, 5L, 5L, 4L, 4L, 4L, 4L, 4L, 2L, 4L,
4L, 3L, 4L, 5L, 4L, 3L, 4L, 5L, 1L, 5L, 4L, 1L, 3L, 1L, 1L, 3L,
5L, 2L), diseaseA = c(1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0,
1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1), diseaseB = c(0, 1,
0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0,
0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0,
1, 0, 1, 0), diseaseC = c(0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1,
1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0,
1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0,
1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1,
0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0), raceeth = structure(c(2L,
2L, 2L, 2L, 3L, 2L, 2L, 3L, 3L, 2L, 2L, 2L, 2L, 3L, 3L, 2L, 3L,
2L, 2L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
1L, 1L, 1L, 2L, 1L, 1L, 3L, 3L, 2L, 2L, 3L, 3L, 2L, 2L, 2L, 2L,
2L, 2L, 3L, 2L, 1L, 2L, 3L, 3L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 2L, 3L, 3L, 1L, 3L, 3L, 3L, 1L, 3L, 3L, 2L,
3L, 3L, 2L, 1L, 2L, 2L, 1L, 3L, 2L), .Label = c("Hispanic", "NH White",
"NH Black"), class = "factor")), row.names = c(NA, 90L), class = "data.frame")
如果我可以提供任何额外的信息,请告诉我。
我计算了每位患者的疾病(我认为患者坚持他们的种族,这就是为什么按 patient_id 和种族分组应该没问题,我按两个变量分组,因为我需要保留种族列还有)
library(dplyr)
df2 <- df %>%
group_by(patient_id,raceeth) %>%
summarise_all(sum) %>%
ungroup
df2
输出;
patient_id raceeth diseaseA diseaseB diseaseC
<int> <fct> <dbl> <dbl> <dbl>
1 1 NH White 12 8 11
2 2 NH White 11 11 10
3 3 Hispanic 6 4 7
4 4 NH Black 12 8 8
5 5 NH Black 3 8 6
现在我可以计算每个种族组的平均值;
df3 <- df2 %>%
select(-patient_id) %>%
group_by(raceeth) %>%
summarise_all(mean)%>%
ungroup
df3
输出;
raceeth diseaseA diseaseB diseaseC
<fct> <dbl> <dbl> <dbl>
1 Hispanic 6 4 7
2 NH White 11.5 9.5 10.5
3 NH Black 7.5 8 7