r-使用mutate计算条件比例



我正在处理这样的数据集。

library(magrittr)
library(tidyverse)
time<- c("day1", "day1", "day1", "day2", "day2", "day2", "day3", "day3", "day3")
indviduals<- c(23,25,26,22,24,20,21,23,15)
treatment<- c(rep(c("a", "b", "c")))
dat<-NULL
dat <- dat %>% cbind(treatment, time, indviduals)%>%
as.data.frame(stringAsFactors=F)
str(dat)

我想知道如何计算每天和治疗的存活率。换句话说,我想要第四列给我一个比例的个人";"活着";。我想把第一天的个人数字减去第二天的数字除以100每天都这样做,并进行治疗。

我想要的是这样的东西:

dat$prop<- c(1, 1,1,.99,.99,.94, .98, .98, .89)

我真的很感激你的真知灼见!谢谢

我尝试过使用聚集然后变异,但我不确定在变异((中放什么作为自变量

>   dat <- dat %>%
>     gather(time, individuals, -treatment) %>%
>     group_by(treatment, day) %>%
>     mutate("prop" = 1 - ((#first value of ind day 1 - #value of ind day 2) / 100 by treatment))

dplyr中,我们可以用indviduals除以100减去indviduals中的first值来计算group_bytreatmentprop

library(dplyr)
dat %>% 
group_by(treatment) %>% 
mutate(prop = 1 - (first(indviduals) - indviduals)/100)

#  time  indviduals treatment  prop
#  <chr>      <dbl> <chr>     <dbl>
#1 day1          23 a          1   
#2 day1          25 b          1   
#3 day1          26 c          1   
#4 day2          22 a          0.99
#5 day2          24 b          0.99
#6 day2          20 c          0.94
#7 day3          21 a          0.98
#8 day3          23 b          0.98
#9 day3          15 c          0.89

这也可以在使用ave的基础R中完成

dat$prop <- with(dat, 1 - (ave(indviduals, treatment, 
FUN = function(x) x[1]) - indviduals)/100)

或使用data.table:

library(data.table)
setDT(dat)[, prop := 1 - (first(indviduals) - indviduals)/100, treatment]

数据

dat <- data.frame(time, indviduals, treatment, stringsAsFactors = FALSE)

最新更新