来自两个独立数据集的发生率

时间:2021-04-01 14:09:09

标签: r

我对 R 非常陌生,并试图弄清楚如何将两个数据集放在一起。 我有一张表格(从 excel 导入),其中包含有关患有某些疾病的人的信息 - 有关出生年份和胎龄的信息,例如第一列中的人数 1 = 1990,第二列中的人数为 40。 在另一组中,我有关于那年有多少具有该胎龄的人出生的信息。所以对于 1990 年、1991 年等,我有关于 37 周、38 周等之后出生的人数的信息。

我想根据胎龄计算疾病的发病率。例如,如果有 8 人在 40 周后出生于 1990 年,而在 1990 年有 5000 人在妊娠 40 周后出生,那么发病率为 8/5000...

关于如何将数据集放在一起以及用于计算类似或类似内容的代码的任何想法或链接?

1 个答案:

答案 0 :(得分:0)

这是一个 dplyr 解决方案。

library(dplyr)
dat1 %>%
  group_by(disease, gestation) %>%
  tally() %>%
  left_join(., dat2, by = "gestation") %>%
  mutate(occurrence = n/count)
# # A tibble: 510 x 6
# # Groups:   disease [10]
#    disease gestation     n  year count occurrence
#    <chr>       <int> <int> <int> <int>      <dbl>
#  1 A              35    12  1965   447     0.0268
#  2 A              35    12  1969   655     0.0183
#  3 A              35    12  1981   930     0.0129
#  4 A              35    12  1983   146     0.0822
#  5 A              35    12  1984   348     0.0345
#  6 A              35    12  1985   553     0.0217
#  7 A              35    12  1987   655     0.0183
#  8 A              35    12  1988   462     0.0260
#  9 A              35    12  1993    11     1.09  
# 10 A              35    12  1995   434     0.0276
# # ... with 500 more rows

数据

set.seed(42) # R-4
n <- 1000
dat1 <- data.frame(
  people = sample(1000, size=n, replace=TRUE),
  born = sample(1960:2010, size=n, replace=TRUE),
  disease = sample(LETTERS[1:10], size=n, replace=TRUE),
  gestation = sample(35:40, size=n, replace=TRUE)
)
dat2 <- data.frame(
  year = 1960:2010,
  gestation = sample(35:40, size=51, replace=TRUE),
  count = sample(1:1000, size=51, replace=TRUE)
)

head(dat1)
#   people born disease gestation
# 1    561 2006       C        36
# 2    997 1973       I        37
# 3    321 1976       J        38
# 4    153 1996       J        38
# 5     74 2008       A        39
# 6    228 1976       B        40
head(dat2)
#   year gestation count
# 1 1960        39   385
# 2 1961        38   104
# 3 1962        40   683
# 4 1963        40   770
# 5 1964        36   111
# 6 1965        35   447
相关问题