2015-06-02 7 views
44

साथ एकाधिक स्तंभों फैल रहा tidyr से spread उपयोग कर सकते हैं विस्तृत प्रारूप करने के लिए इसे बदलने के लिए इस नमूने चरआर tidyr

df <- data.frame(month=rep(1:3,2), 
       student=rep(c("Amy", "Bob"), each=3), 
       A=c(9, 7, 6, 8, 6, 9), 
       B=c(6, 7, 8, 5, 6, 7)) 

लो।

> df[, -4] %>% spread(student, A) 
    month Amy Bob 
1  1 9 8 
2  2 7 6 
3  3 6 9 

लेकिन मैं दो मानों को कैसे फैल सकता हूं उदा। दोनों A और B, इस तरह के उत्पादन की तरह

month Amy.A Bob.A Amy.B Bob.B 
1  1  9  8  6  5 
2  2  7  6  7  6 
3  3  6  9  8  7 

उत्तर

95

कुछ यहाँ एक संभव दोनों सरल और बहुत ही कुशल data.table

library(data.table) ## v >= 1.9.6 
dcast(setDT(df), month ~ student, value.var = c("A", "B")) 
# month Amy_A Bob_A Amy_B Bob_B 
# 1:  1  9  8  6  5 
# 2:  2  7  6  7  6 
# 3:  3  6  9  8  7 

या एक संभव tidyr समाधान

df %>% 
    gather(variable, value, -(month:student)) %>% 
    unite(temp, student, variable) %>% 
    spread(temp, value) 

# month Amy_A Amy_B Bob_A Bob_B 
# 1  1  9  6  8  5 
# 2  2  7  7  6  6 
# 3  3  6  8  9  7 
+0

मैं का उपयोग कर समाधान है कि एक ही समस्या है लेकिन मेरे पास कुछ महीनों के लिए कुछ एंट्री छात्र, ए, और बी हैं। कोड निम्न त्रुटि देता है: त्रुटि: पंक्तियों के लिए डुप्लिकेट पहचानकर्ता। कृपया मदद करे। –

+1

@PolarBear आप डुप्लिकेट कैसे संभालना चाहते हैं? आप योग करना चाहते हैं? क्या मतलब है? 'Data.table' समाधान आज़माएं और' fun.aggregate = sum' को 'dcast' –

+0

में जोड़ें, मैं tidyr –