Hi,
dat1<- read.table(text="
name?? number
a??????????? 2
a??????????? 3
b??????????? 5
b??????????? 7
c???????????? 9
c???????????? 1
",sep="",header=TRUE,stringsAsFactors=FALSE)
aggregate(number~name,data=dat1,sum)
#? name number
#1??? a????? 5
#2??? b???? 12
#3??? c???? 10
#or
library(plyr)
ddply(dat1,.(name),summarize,Sum_Number=sum(number))
#? name Sum_Number
#1??? a????????? 5
#2??? b???????? 12
#3??? c???????? 10
#or
library(data.table)
dt1<- data.table(dat1)
dt1[,list(Sum_Number=sum(number)),by=name]
#?? name Sum_Number
#1:??? a????????? 5
#2:??? b???????? 12
#3:??? c???????? 10
##Speed comparison:
set.seed(1254)
name<- sample(letters,1e6,replace=TRUE)
number<- sample(1:10,1e6,replace=TRUE)
datTest<- data.frame(name,number,stringsAsFactors=FALSE)
system.time(res1<-aggregate(number~name,data=datTest,sum))
# user? system elapsed
#? 2.184?? 0.000?? 1.772
system.time(res2<-ddply(datTest,.(name),summarize,Sum_Number=sum(number)))
# user? system elapsed
#? 0.256?? 0.000?? 0.227?
dtTest<- data.table(datTest)
system.time(res3<- dtTest[,list(Sum_Number=sum(number)),by=name])
#user? system elapsed
#? 0.084?? 0.000?? 0.066
?names(res1)[2]<- names(res2)[2]
?identical(res1,res2)
#[1] TRUE
?res3New<- res3[order(name),]
identical(res1,as.data.frame(res3New))
#[1] TRUE
#to get descriptive statistics
by(dat1[,2],dat1[,1],summary)
#or
library(psych)
?describeBy(dat1[,2],dat1[,1],mat=TRUE)
A.K.
Hello. I have a big table and need to have descriptive statistics by sub-groups of data.
For example:
name ? number
a ? ? ? ? ? ?2
a ? ? ? ? ? ?3
b ? ? ? ? ? ?5
b ? ? ? ? ? ?7
c ? ? ? ? ? ? 9
c ? ? ? ? ? ? 1
How can I get/print a table that show the sum of numbers for each name?
a = 5
b = 12
c = 10
?Thank you!!!