如何添加将功能应用于现有数据框的结果?

时间:2019-03-23 21:48:19

标签: r tidyverse confidence-interval mutate

我正在尝试计算某些利率的置信区间。 我正在使用tidyverse和Epitools通过Byar的方法来计算CI。

几乎可以肯定我做错了。

library (tidyverse)
library (epitools)


# here's my made up data

DISEASE = c("Marco Polio","Marco Polio","Marco Polio","Marco Polio","Marco Polio",
            "Mumps","Mumps","Mumps","Mumps","Mumps",
            "Chicky Pox","Chicky Pox","Chicky Pox","Chicky Pox","Chicky Pox")
YEAR = c(2011, 2012, 2013, 2014, 2015,
         2011, 2012, 2013, 2014, 2015,
         2011, 2012, 2013, 2014, 2015)
VALUE = c(82,89,79,51,51,
          79,91,69,89,78,
          71,69,95,61,87)
AREA =c("A", "B","C")

DATA = data.frame(DISEASE, YEAR, VALUE,AREA)


# this is a simplification, I have the population values in another table, which I've merged 
# to give me the dataframe I then apply pois.byar to.
DATA$POPN = ifelse(DATA$AREA == "A",2.5,
              ifelse(DATA$AREA == "B",3,
                     ifelse(DATA$AREA == "C",7,0)))


# this bit calculates the number of things per area
rates<-DATA%>%group_by(DISEASE,AREA,POPN)%>%
  count(AREA)

然后,如果我想计算CI,我认为这会起作用

rates<-DATA%>%group_by(DISEASE,AREA,POPN)%>%
  count(AREA) %>%
  mutate(pois.byar(rates$n,rates$POPN))

但是我明白了

Error in mutate_impl(.data, dots) : 
  Evaluation error: arguments imply differing number of rows: 0, 1.

这有效:

pois.byar(rates$n,rates$POPN)

然后说:“将pois.byar函数的结果转换为数据帧,然后合并回原始数据”似乎很愚蠢。我可能只是为了获取一些数据而尝试过...。我不想这样做。这不是正确的做事方式。

非常感谢收到任何建议。 我认为这是一个相当基本的问题。并表明我不是坐着学习,而是尝试边走边做。

这就是我想要的 疾病年份n区域popn x pt率下最高浓度水平

1 个答案:

答案 0 :(得分:1)

我不清楚您的预期输出应该给我什么。您的评论并没有真正的帮助。最好明确包括您提供的示例数据的预期输出。

这里的问题是pois.byvar returns a data.frame。因此,为了使mutate能够使用pois.byvar的输出,我们需要将data.frame s存储在list中。

这是您代码的整理版本

library(tidyverse)
DATA %>%
    mutate(POPN = case_when(
        AREA == "A" ~ 2.5,
        AREA == "B" ~ 3,
        AREA == "C" ~ 7,
        TRUE ~ 0)) %>%
    group_by(DISEASE,AREA,POPN) %>%
    count(AREA) %>%
    mutate(res = list(pois.byar(n, POPN)))

这将创建列res,其中包含data.frame的{​​{1}}输出。

或者您可能想pois.byar unnest列将条目扩展到不同的列?

list