我似乎无法让这个工作或找到答案。 我有一个这样的数据框:
PatientID <- c('1', "1", "1","1", "2","2","2","2","3")
hospital.time <- c(1,1,1,2,1,2,3,4,1)
fever <- c(1,1,NA,0,1,NA,1,1,NA)
ventilator<-c(1,0,1,1,0,1,0,1,NA)
df <- data.frame(PatientID, hospital.time, fever,ventilator)
每位患者都有几次测量,因此每次测量都会重复ID。 我想算一下1小时内有多少病人发烧和呼吸机,有多少病人只有发烧,有多少只用于呼吸机,同样用于2小时,3小时等。
我尝试过使用基于PatientID的boolean和dplyr,但没有运气。 我是否必须将其置于for循环中才能使其正常工作?
希望你能提供帮助。
答案 0 :(得分:0)
这是使用dplyr的方法:
library(dplyr)
pid <- c('1', "1", "1","1", "2","2","2","2","3")
hospital.time <- c(1,1,1,2,1,2,3,4,1)
fever <- c(1,1,NA,0,1,NA,1,1,NA)
ventilator<-c(1,0,1,1,0,1,0,1,NA)
df <- data.frame(pid, hospital.time, fever,ventilator)
dfg<-df %>% mutate(fv=ifelse(fever==1 & ventilator==1, 1, 0)) %>% group_by(pid) %>% summarise(f=sum(fever,na.rm=TRUE), v=sum(ventilator, na.rm=TRUE), fv=sum(fv, na.rm=TRUE))
dfg
输出:
pid f v fv
(fctr) (dbl) (dbl) (dbl)
1 1 2 3 1
2 2 3 2 1
3 3 0 0 0
答案 1 :(得分:0)
dplyr
的另一种方式:
df %>%
group_by(PatientID, hospital.time) %>%
summarise(f = ifelse(sum(fever, na.rm =T) > 0, 1, 0),
v = ifelse(sum(ventilator, na.rm = T) > 0, 1, 0),
fandV = ifelse(sum(c(ventilator, fever), na.rm = T) > 1, 1, 0))
按PatientID
和hospital.time
进行分组,并为每个ID和小时返回二进制值,无论他们是否有发烧,呼吸机或两者兼而有之。