2013-12-07 3 views
0

У меня довольно большой фрейм данных, который включает информацию о физических лицах, разделенных на группы лечения. Я пытаюсь генерировать переменные и гендерные проценты для каждой группы. Я смог рассчитать средства, но я не уверен, как получить гендерные проценты.рассчитать процентное соотношение пола из кадра сгруппированных данных в R

Ниже я создал небольшую реплику, что выглядит мои данные, как:

library(plyr) 
#create variables and data frame 
sampleid<-seq(1:100) 
gender = rep(c("female","male"),c(50,50)) 
score <- rnorm(100) 
age<-sample(25:35,100,replace=TRUE) 
treatment <- rep(seq(1:5), each=4) 
d <- data.frame(sampleid,gender,age,score, treatment) 

>head(d) 

    sampleid gender age  score treatment 
1  1 female 34 1.6917201   1 
2  2 female 26 -1.6189545   1 
3  3 female 28 1.2867895   1 
4  4 female 34 -0.5027578   1 
5  5 female 29 -1.3652895   2 
6  6 female 26 -2.4430843   2 

я получить среднее значение каждого числового столбца по:

groupstat<-ddply(d, .(treatment),numcolwise(mean)) 

, который дает:

treatment sampleid age  score 
1   1  42.5 29.15 0.142078574 
2   2  46.5 29.50 -0.261492514 
3   3  50.5 30.50 -0.188393235 
4   4  54.5 30.45 0.003526078 
5   5  58.5 30.55 0.062996737 

Однако мне также нужна дополнительная колонка «Процентная женщина», которая должна дать мне процент женщин в пределах каждой группы лечения 1: 5. Может кто-нибудь помочь мне в том, как добавить это?

+0

Создать новую переменную, женщина = 1, мужчина = 0. Возьмем среднее значение. – Michael

+0

ah, gotcha. Спасибо – CadisEtRama

ответ

4

Попробовать это

groupstat<-ddply(d, .(treatment),summarise, 
       meansc= mean(score), 
       meanage= mean(age), 
       meanID= mean(sampleid), 
       nfem= length(gender[gender=="female"]), # number females per treatment group 
       nmale= length(gender[gender=="male"]), # number of males per treatment group 
       percentfem= nfem/(nfem+nmale)) # percent females by treatment group 
+0

, который отлично работал. – CadisEtRama

1

Я бы первым разделить на группы лечения (split(d, f = d$treatment)) и чем известково средства для каждой группы (function(x) sum(x$gender == "female")/length(x$gender):

sapply(split(d, f = d$treatment), function(x) sum(x$gender == "female")/length(x$gender)) 
Смежные вопросы