2016-11-08 19 views
5

में catogorical कॉलम के सभी अनन्य मानों के लिए राजस्व का मासिक रकम पाने के लिए मैं एक df जो इस तरह के डाटा होते हैं:एक dataframe चौड़ा आर

sub = c("X001","X002", "X001","X003","X002","X001","X001","X003","X002","X003","X003","X002") 
month = c("201506", "201507", "201506","201507","201507","201508", "201508","201507","201508","201508", "201508", "201508") 
tech = c("mobile", "tablet", "PC","mobile","mobile","tablet", "PC","tablet","PC","PC", "mobile", "tablet") 
brand = c("apple", "samsung", "dell","apple","samsung","apple", "samsung","dell","samsung","dell", "dell", "dell") 

revenue = c(20, 15, 10,25,20,20, 17,9,14,12, 9, 11) 

df = data.frame(sub, month, brand, tech, revenue) 

मैं कुंजी के रूप में उप और महीने का उपयोग करें और एक प्राप्त करना चाहते हैं प्रति माह प्रत्येक ग्राहक के लिए पंक्ति जो उस महीने के लिए उस ग्राहक के लिए तकनीकी और ब्रांड में अद्वितीय मूल्यों के लिए राजस्व का योग प्रदर्शित करती है। यह उदाहरण सरलीकृत है और कम कॉलम के साथ मेरे पास एक विशाल डेटा सेट है, मैंने इसे data.table के साथ करने का प्रयास करने का निर्णय लिया है।

मैं एक catagorical स्तंभ के लिए यह करने के लिए कामयाब रहे हैं, या तो तकनीक या ब्रांड इस का उपयोग करते हुए:

df1 <- dcast(df, sub + month ~ tech, fun=sum, value.var = "revenue") 

लेकिन मैं अब तक मैं इस की कोशिश की है दो या अधिक caqtogorical स्तंभों के लिए यह करना चाहते हैं,:

df2 <- dcast(df, sub + month ~ tech+brand, fun=sum, value.var = "revenue") 

और यह सिर्फ दोनों catogorical कॉलम और उस के लिए रकम की अनन्य मानों संयोजित करता लेकिन मुझे लगता है कि नहीं करना चाहती। मैं सभी catogorical कॉलम के प्रत्येक अद्वितीय मूल्य के लिए अलग कॉलम wan।

मैं आर के लिए नया हूं और वास्तव में किसी भी मदद की सराहना करता हूं।

+0

अपेक्षित आउटपुट क्या होगा? – Haboryme

उत्तर

5

(मैं मान लेंगे कि df एक data.table बल्कि एक data.frame अपने उदाहरण की तरह है।) जबकि sub, month और revenue कुंजी के रूप में रखते हुए इस बात के लिए

एक संभव समाधान पहले melt डेटा है। इस प्रकार, brand और tech को एक एकल चर में परिवर्तित किया जाएगा जिसमें कुंजी के प्रत्येक मौजूदा संयोजन से संबंधित मान होगा। इस तरह से हम वापस आसानी से इसे dcast में सक्षम हो जाएगा के रूप में हम अपने पहले उदाहरण की तरह एक एकल स्तंभ के खिलाफ काम कर रही हो जाएगा

dcast(melt(df, c(1:2, 5)), sub + month ~ value, sum, value.var = "revenue") 
#  sub month PC apple dell mobile samsung tablet 
# 1: X001 201506 10 20 10  20  0  0 
# 2: X001 201508 17 20 0  0  17  20 
# 3: X002 201507 0  0 0  20  35  15 
# 4: X002 201508 14  0 11  0  14  11 
# 5: X003 201507 0 25 9  25  0  9 
# 6: X003 201508 12  0 21  9  0  0 

के अनुसार ऑप्स टिप्पणी, आप आसानी से एक उपसर्ग भी जोड़कर जोड़ सकते हैं फॉर्मूला में variable। इस तरह, कॉलम को भी ठीक से आदेश दिया जाएगा

dcast(melt(df, c(1:2, 5)), sub + month ~ variable + value, sum, value.var = "revenue") 
#  sub month brand_apple brand_dell brand_samsung tech_PC tech_mobile tech_tablet 
# 1: X001 201506   20   10    0  10   20   0 
# 2: X001 201508   20   0   17  17   0   20 
# 3: X002 201507   0   0   35  0   20   15 
# 4: X002 201508   0   11   14  14   0   11 
# 5: X003 201507   25   9    0  0   25   9 
# 6: X003 201508   0   21    0  12   9   0 
+0

धन्यवाद डेविड, कोड ठीक चलाता है। हालांकि जेनरेट किए गए कॉलम का ऑर्डर नहीं किया गया है और अब मैं Tech_, Brand_ का एक उपसर्ग अपने संबंधित चौड़े कॉलम में जोड़ना चाहता हूं, इसलिए मुझे लगता है कि मैं उस पर काम करूंगा। –

+0

कोई समस्या नहीं, बस सूत्र में 'चर' जोड़ें, मेरा संपादन देखें। –

संबंधित मुद्दे