2013-05-20 32 views
5

tôi đang cố gắng để làm một đơn giản reshape để làm test cái nhìn như thế này:Reshape đơn giản trong R sử dụng reshape2 gây lỗi

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

Đây là mã tôi cố gắng:

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 

gì đang xảy ra đây?

> 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 
+0

Nếu mục tiêu là để phục hồi 'test' từ' m' sau đó bạn muốn: 'dcast (m, cf ~ biến, value.var = "value") ' –

+0

@ G.Gothendieck: không chắc chắn tôi làm theo, mục tiêu là làm cho kiểm tra trông giống như dòng thứ hai của câu hỏi. – Alex

+0

Hãy thử điều này: 'dcast (m, 1 ~ cf + biến)' –

Trả lời

6

Có thể vấn đề của bạn là bạn có các biến "hàng" không hiệu quả (nghĩa là bạn không muốn gì cả trên LHS của công thức đúc). Cách giải quyết này (thêm biến giả) có thể hữu ích?

d = dcast(cbind(x=1,m), formula = x ~ cf + variable) 
+0

có điều này giải quyết nó .. đây phải là một lỗi? – Alex

+1

Tôi không chắc chắn nó là * kỹ thuật * một lỗi - người ta sẽ phải xem xét chặt chẽ các thông số kỹ thuật/tài liệu để xem nếu trường hợp zero-biến trái được thảo luận ở tất cả. Nếu nó không được đề cập, thì đó là "hành vi không xác định" chứ không phải là lỗi ... (Phần mềm không làm những gì bạn muốn, trong trường hợp nhà thiết kế không xem xét, không nhất thiết cấu thành lỗi.) –

5

Đây là cách cơ bản R, cho vui ...

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 
+0

cảm ơn! tôi đã hy vọng để dính vào các gói kể từ khi tôi được sử dụng để nó nhưng tôi nên sử dụng chức năng cơ sở R khi có thể. – Alex

Các vấn đề liên quan