Patrick Hausmann
2011-Aug-15 16:27 UTC
[R] MARGIN in sweep refers to a specific column in a second df
Dear R folks,
I am doing some calculations over an array using sweep and apply.
# Sample Data (from help 'addmargins')
Aye <- sample(c("Yes", "Si", "Oui"), 177,
replace = TRUE)
Bee <- sample(c("Hum", "Buzz"), 177, replace = TRUE)
Sea <- sample(c("White", "Black", "Red",
"Dead"), 177, replace = TRUE)
(A <- table(Aye, Bee, Sea))
apply(A, c(1, 2), sum )
## ok, sweep with fixed MARGIN
round( sweep( apply(A, c(1, 2), sum ), 1 , c(111, 333, 444), FUN =
"/"), 2)
# DF with values for sweep MARGIN
DF <- data.frame( answer = c(111, 333, 444), Aye = c("Oui",
"Si", "Yes"))
## ok, MARGIN in correct order
round( sweep( apply(A, c(1, 2), sum ), 1 , DF[['answer']], FUN =
"/"), 2)
## But if I change the order in DF the result is not what I want...
DF.s <- DF[order(DF$Aye, decreasing = TRUE), ]
DF.s
round( sweep( apply(A, c(1, 2), sum ), 1 , DF.s[['answer']], FUN =
"/"), 2)
So, I would like to know, how to set MARGIN in sweep to refer to the
values in DF with notice of the Aye-column?
Thanks for any help
Patrick