我想总结一下受过地区治疗的人的百分比。
我为此创建了一个虚拟数据集:
id <- seq(1:1000)
region <- rep(c("A","B","C","D","E"),c(200,200,200,200,200))
treatment <- rep(seq(1:2), each=4)
d <- data.frame(id,region,treatment)
我如何找出(a)每个地区的总人数(我认为我会为此目的使用长度)和(b)接受治疗的人的百分比1(与2相反)BY地区?
我会为某些ID设置NAs,因此如果可以从一开始就将其纳入代码中,那将不胜感激。
我过去曾使用ddply来总结一个连续变量(即均值),但在使用因子变量时却在苦苦挣扎。
任何帮助将不胜感激。
答案 0 :(得分:2)
您也可以使用data.table:
library(data.table)
setDT(d)[,.(.N,prop=sum(treatment==2)/.N),
by=region]
region N prop
1: A 200 0.5
2: B 200 0.5
3: C 200 0.5
4: D 200 0.5
5: E 200 0.5
答案 1 :(得分:2)
dplyr
解决方案:
library(dplyr)
d %>% group_by(region) %>% summarize(NumPat=n(),prop=sum(treatment==1)/n())
我们在这里做的是逐个区域,然后根据每组患者的数量进行总结,然后计算接受治疗的患者比例1.
答案 2 :(得分:1)
如果我正确理解了这个问题,可以使用table
和prop.table
轻松(快速!)完成:
prop.table(table(d$treatment, d$region))
这为您提供每个细胞的百分比。如果您想获得行或列的百分比,您希望使用margin
中的prop.table
参数:
prop.table(table(d$treatment, d$region), margin = 2) # column-wise
prop.table(table(d$treatment, d$region), margin = 1) # row-wise
答案 3 :(得分:0)
为了完整起见,您可以使用ddply()
中的plyr
来完成此操作:
library(plyr)
ddply(d[!is.na(d$id),],.(region),summarize,
N = length(region),
prop=mean(treatment==1))
# region N prop
# 1 A 200 0.5
# 2 B 200 0.5
# 3 C 200 0.5
# 4 D 200 0.5
# 5 E 200 0.5
这假定您要通过删除观察来处理NA
中的id
值。