如何将功能从包应用到数据框

时间:2018-10-01 11:09:37

标签: r function apply

如何将包函数应用于数据框?
我有一个数据集(df),其中有两列(总计和n),我想从Epitools包中应用pois.exact函数(pois.exact(x,pt = 1,conf.level = 0.95))用x = df $ n和pt = df $ total f,得到一个“新”数据帧(new_df),其中还有3列以及相应的四舍五入的计算速率,上下CI?

 df <- data.frame("total" = c(35725302,35627717,34565295,36170648,38957933,36579643,29628394,18212075,39562754,1265055), "n" = c(24,66,166,461,898,1416,1781,1284,329,12))


> df
      total    n
1  35725302   24
2  35627717   66
3  34565295  166
4  36170648  461
5  38957933  898
6  36579643 1416
7  29628394 1781
8  18212075 1284
9   9562754  329

实际上,数据帧的长度要长得多。 例如,对于第一行,期望的结果是:

require (epitools)
round (pois.exact (24, pt = 35725302, conf.level = 0.95)* 100000, 2)[3:5]
rate lower upper
1 0.07  0.04   0.1

通过应用pois.exact函数,具有添加结果的新数据框应如下所示。

 > new_df
     total    n incidence lower_95IC uppper_95IC
1 35725302   24      0.07       0.04        0.10
2 35627717   66      0.19       0.14        0.24
3 34565295  166      0.48       0.41        0.56
4 36170648  461      1.27       1.16        1.40
5 38957933  898      2.31       2.16        2.46
6 36579643 1416      3.87       3.67        4.08
7 29628394 1781      6.01       5.74        6.03
8 18212075 1284      7.05       6.67        7.45
9  9562754  329      3.44       3.08        3.83

谢谢。

1 个答案:

答案 0 :(得分:1)

df %>% 
  cbind( pois.exact(df$n, df$total) ) %>%
  dplyr::select( total, n, rate, lower, upper )

#       total    n       rate      lower      upper
# 1  35725302   24 1488554.25 1488066.17 1489042.45
# 2  35627717   66  539813.89  539636.65  539991.18
# 3  34565295  166  208224.67  208155.26  208294.10
# 4  36170648  461   78461.28   78435.71   78486.85
# 5  38957933  898   43383.00   43369.38   43396.62
# 6  36579643 1416   25833.08   25824.71   25841.45
# 7  29628394 1781   16635.82   16629.83   16641.81
# 8  18212075 1284   14183.86   14177.35   14190.37
# 9  39562754  329  120251.53  120214.06  120289.01
# 10  1265055   12  105421.25  105237.62  105605.12