Reputation: 173
If I got a table like:
group1 group2 frequency
A B 1
A A 2
A D 4
A C 1
B B 1
B D 5
B C 6
B A 3
. . .
. . .
. . .
I want to run a shapiro test group by "group1". The result I want is:
group1 statistics p.value
A 0.9475648 1.228816e-01
B 0.7533102 6.058378e-06
. . .
. . .
. . .
Does anyon have a clue?
Upvotes: 1
Views: 697
Reputation: 886948
With dplyr
library(dplyr)
dat %>%
group_by(group1) %>%
do(data.frame(shapiro.test(.$frequency)[c("statistic", "p.value")]))
# group1 statistic p.value
# (fctr) (dbl) (dbl)
#1 A 0.8274267 0.1611906
#2 B 0.9630724 0.7982271
dat <- data.frame(group1=c("A","A","A","A","B","B","B","B"),
group2=c("B","A","D","C","B","D","C","A"),
frequency=c(1,2,4,1,1,5,6,3))
Upvotes: 1
Reputation: 25225
is this what you are looking for?
tab <- data.frame(group1=c("A","A","A","A","B","B","B","B"), group2=c("B","A","D","C","B","D","C","A"), frequency=c(1,2,4,1,1,5,6,3))
do.call(rbind, by(tab, tab$group1, function(x) unlist(shapiro.test(x$frequency)[c("statistic","p.value")])))
or this:
library(plyr)
ddply(tab, .(group1),
function(x) unlist(shapiro.test(x$frequency)[c("statistic","p.value")]))
Upvotes: 4