我正在处理这样的数据集。
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_by
treatment
和prop
。
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)