2011-11-11 72 views
2

我data.frame看起來像這樣重塑數據值

ID | test | test_result 
1 | B | 10 
2 | A | 9 
3 | A | 11 
4 | C | 7 
5 | F | 5 

我想是這樣的:

test | test_reult_ID1 | test_result_ID2 | test_result_ID3 ... 
A | NA   |  9   | 11 
B | 10   |  NA   | NA 

它與重塑()的寬幅只有少數情況,但整個數據幀(大約23.000個ID)重塑()需要很長時間。熔化()和cast()會重新整形數據,但會將test_result中的值替換爲測試的頻率。任何其他想法如何管理?謝謝!從reshape2包

+0

http://stackoverflow.com/a/9617424/210673現在有一個列表的各種方法來做到這一點。 – Aaron

回答

6

dcast執行此:

require(reshape2) 
dcast(data, test ~ ID , value_var = 'test_result') 

# test 1 2 3 4 5 
#1 A NA 9 11 NA NA 
#2 B 10 NA NA NA NA 
#3 C NA NA NA 7 NA 
#4 F NA NA NA NA 5 
+0

太好了,謝謝! – Elisa

+0

@elisa:你的歡迎 – Alex

+0

我剛剛試過整個data.frame,它給了我這個錯誤信息:'聚合函數缺失:默認爲長度',再次只有頻率而不是值。只有幾行在工作。你知道爲什麼嗎? – Elisa

0

使用reshape函數的另一種溶液中base R.

reshape(mydf, direction = 'wide', idvar = 'test', timevar = 'ID', 
    v.names = 'test_result', sep = "_") 

EDIT。我看到你已經試過reshape,並且花了太長時間。你能否提供你的實際數據的更多細節?

+0

我的原始數據有三列,約23000行。每行有兩個相同的ID(一個人已經解決了兩個測試,例如A和F,因此兩個結果和兩個行)。這可能是問題嗎? – Elisa