Reputation: 1935
Let's say I have a frequency table:
t = matrix(c(20,10,5,15), ncol=2, dimnames=list(c("yes","no"), c("yes","no")))
t
yes no
yes 20 5
no 10 15
I want to convert the frequency table back to raw data. My code is (which is not working):
a = rep(c("yes","no"), colSums(t(t)))
b = rep(c("yes","no"), colSums(t))
table(a,b)
b
a no yes
no 20 5
yes 0 25
Can someone tell me what is wrong?
Upvotes: 1
Views: 1855
Reputation: 132651
mat <- matrix(c(20,10,5,15), ncol=2, dimnames=list(c("yes","no"), c("yes","no")))
a <- rep(rep(c("yes", "no"), 2), c(mat))
b <- rep(c("yes", "no"), colSums(mat))
a <- factor(a, levels=c("yes", "no"))
b <- factor(b, levels=c("yes", "no"))
table(a, b)
b
a yes no
yes 20 5
no 10 15
Upvotes: 2
Reputation: 70256
I think you want to use melt
from reshape2
:
test = matrix(c(20,10,5,15), ncol=2, dimnames=list(c("yes","no"), c("yes","no")))
test
# yes no
#yes 20 5
#no 10 15
library(reshape2)
melt(test)
# Var1 Var2 value
#1 yes yes 20
#2 no yes 10
#3 yes no 5
#4 no no 15
Upvotes: 0