[R] calcul of the mean in a period of time
arun
smartpink111 at yahoo.com
Thu May 23 17:34:38 CEST 2013
HI GG,
I should had checked with multiple t=0 only rows.
Apologies!
Check if this work: (Changed the thread name as the solution applies to that problem)
dat2<- read.csv("dat6.csv",header=TRUE,sep="\t",row.names=1)
str(dat2)
#'data.frame': 3896 obs. of 3 variables:
# $ patient_id: int 2 2 2 2 2 2 2 2 2 2 ...
# $ t : int 0 1 2 3 4 5 6 7 8 9 ...
# $ basdai : num 2.83 4.05 3.12 3.12 2.42 ...
library(plyr)
dat2New<-ddply(dat2,.(patient_id),summarize,t=seq(min(t),max(t)))
res<-join(dat2New,dat2,type="full")
lst1<-lapply(split(res,res$patient_id),function(x) {x1<-x[x$t!=0,];do.call(rbind,lapply(split(x1,((x1$t-1)%/%3)+1),function(y) {y1<-if(any(y$t==1)) rbind(x[x$t==0,],y) else y; data.frame(patient_id=unique(y1$patient_id),t=head(y1$t,1),basdai=mean(y1$basdai,na.rm=TRUE))}) ) })
dat3<-dat2[unlist(with(dat2,tapply(t,patient_id,FUN=function(x) x==0 & length(x)==1)),use.names=FALSE),]
head(dat3,3)
# patient_id t basdai
#143 10 0 5.225
#555 37 0 2.450
#627 42 0 6.950
lst2<-split(dat3,seq_len(nrow(dat3)))
lst1[lapply(lst1,length)==0]<-mapply(rbind,lst1[lapply(lst1,length)==0],lst2,SIMPLIFY=FALSE)
res1<-do.call(rbind,lst1)
row.names(res1)<- 1:nrow(res1)
res2<- res1[,-2]
res2$period<-with(res2,ave(patient_id,patient_id,FUN=seq_along))
#res2
#selected rows
res2[c(48:51,189:192,210:215),]
# patient_id basdai period
#48 9 3.625000 8
#49 10 5.225000 1 #t=0 only row
#50 11 6.018750 1
#51 11 6.000000 2
#189 36 6.166667 1
#190 37 2.450000 1 #t=0 only row
#191 38 3.100000 1
#192 38 3.575000 2
#210 41 1.918750 1
#211 41 4.025000 2
#212 41 2.975000 3
#213 41 1.725000 4
#214 42 6.950000 1 #t=0 only row
#215 44 4.300000 1
A.K.
________________________________
From: GUANGUAN LUO <guanguanluo at gmail.com>
To: arun <smartpink111 at yahoo.com>
Sent: Thursday, May 23, 2013 9:50 AM
Subject: Re: how to calculate the mean in a period of time?
Hello, Arun, sorry to trouble you again,
I tried your method and i found that for patient_id==10 et patient_id==37 ect, the scores are repeated 51 times, I don't understand why this occured.
Thank you so much.
GG
More information about the R-help
mailing list