计算R中另一个变量的二进制变量BY的百分比

时间:2016-01-14 14:42:18

标签: r

我想总结一下受过地区治疗的人的百分比。

我为此创建了一个虚拟数据集:

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来总结一个连续变量(即均值),但在使用因子变量时却在苦苦挣扎。

任何帮助将不胜感激。

4 个答案:

答案 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)

如果我正确理解了这个问题,可以使用tableprop.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值。