Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

simple reshape in R using reshape2 causes error

I am trying to do a simple reshape to make test look like this:

a_estimate, a_tstat, b_estimate, b_tstat
1,          3,       2,          4

This is the code I try:

require(reshape2)
test = data.frame(cf=c("a", "b"), estimate=c(1,2), tstat=c(3,4))
m = melt(test, id.vars="cf")
d = dcast(m, formula = . ~ cf + variable)
Error: nrow(res$labels[[1]]) == nrow(data) is not TRUE

What's going on here?

> sessionInfo()    
R version 2.15.2 (2012-10-26)
Platform: x86_64-unknown-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=C                 LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
 [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
 [1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] reshape2_1.2.2

loaded via a namespace (and not attached):
 [1] plyr_1.8      stringr_0.6.2
like image 895
Alex Avatar asked May 20 '13 18:05

Alex


2 Answers

Maybe your problem is that you have effectively zero "row" variables left (i.e., you don't want anything at all on the LHS of the casting formula). This workaround (adding a dummy variable) might help?

d = dcast(cbind(x=1,m), formula = x ~ cf + variable)
like image 76
Ben Bolker Avatar answered Nov 13 '22 13:11

Ben Bolker


Here's the base R way, for fun...

reshape(transform(test, id=1), idvar='id', timevar='cf', direction='wide')[-1]
#   estimate.a tstat.a estimate.b tstat.b
# 1          1       3          2       4
like image 43
Matthew Plourde Avatar answered Nov 13 '22 15:11

Matthew Plourde