[R] Calculating SD according to groups of rows

Dieter Menne dieter.menne at menne-biomed.de
Thu Nov 20 09:20:36 CET 2008


pufftissue pufftissue <pufftissue <at> gmail.com> writes:

> 
> What I am getting is indeed:
> 
> 7200          23955        34563        8934
> 16.39977 10.03896    11.234      14.02
> 
> I'd like the final output to be:
> 
> subject_id         hr_Stand_Deviation
> 7200                  16.39977
> 23955                10.03896
> 34563                11.234
> 8934                  14.02
> 

The hard way could go like that; I personally got used to it, but I admit
it is one of the thinks that are unusually difficult in R.

dat = data.frame(SUBJECT_ID=sample(letters[1:5],100,TRUE),HR=rnorm(100))
sd.list = with(dat, tapply(HR, SUBJECT_ID, sd))
data.frame(SUBJECT_ID=rownames(sd.list),sd=sd.list)

I think Hadley Wickham tried to make life easier with the plyr package,
so I thought something like the below would work out of the box.
However, there must be something wrong with the syntax, the 
result is only "approximately" correct.

Dieter

library(plyr)
daply(dat,.(SUBJECT_ID),sd)
ddply(dat,.(SUBJECT_ID),sd)



More information about the R-help mailing list