[英]Calculate percentages of a binary variable BY another variable in 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)的人數的百分比?
我將為某些ID提供NA,因此,如果從一開始就將其合並到代碼中,將不勝感激。
我過去曾用ddply總結了一個連續變量(即均值),但是在使用因子變量時卻很費勁。
任何幫助將不勝感激。
您也可以使用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
dplyr
解決方案:
library(dplyr)
d %>% group_by(region) %>% summarize(NumPat=n(),prop=sum(treatment==1)/n())
我們要做的是按區域分組,然后通過管道將其匯總為每個組中的患者人數,然后計算接受治療1的患者的比例。
如果我正確理解了這個問題,可以使用table
和prop.table
輕松(快速)完成prop.table
:
prop.table(table(d$treatment, d$region))
這為您提供了每個單元格的百分比。 如果要獲取行或列百分比, prop.table
使用prop.table
中的margin
參數:
prop.table(table(d$treatment, d$region), margin = 2) # column-wise
prop.table(table(d$treatment, d$region), margin = 1) # row-wise
為了完整ddply()
這是使用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
假設您想通過刪除觀察值來處理id
的NA
值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.