2013-09-03 7 views
8

के आधार पर कॉलम के जोड़े घटाएं मैं पहले से माफ़ी मांगूंगा - मुझे पता है कि यह शायद कहीं और उत्तर दिया गया है, लेकिन मुझे लगता है कि मुझे आवश्यक उत्तर नहीं मिल रहा है, और अनुकूलित करने में सक्षम नहीं हो सकता अन्य कोड जो मैंने अपनी जरूरतों को पाया है।मेल खाने वाले कॉलम

मैं एक डेटा फ्रेम:

FILE | TECHNIQUE | COUNT 
------------------------ 
A | ONE  | 10 
A | TWO  | 25 
B | ONE  | 5 
B | TWO  | 30 
C | ONE  | 30 
C | TWO  | 50 

मैं प्रत्येक फ़ाइल के लिए एक पंक्ति के साथ एक और दो के बीच मानों की गणना के अंतर का एक डेटा फ्रेम निर्माण करने के लिए, चाहते हैं, यानी

FILE | DIFFERENCE 
----------------- 
A | 15 
B | 25 
C | 20 

मुझे विश्वास है कि मुझे बेस आर या प्लीर के साथ यह काफी आसानी से करने में सक्षम होना चाहिए, लेकिन थोड़ा सा अटक गया है। क्या कोई ऐसा करने का एक अच्छा तरीका सुझा सकता है, और शायद प्लीयर पर अच्छे ट्यूटोरियल जो भविष्य में इसी तरह की समस्याओं के साथ मेरी मदद कर सकता है?

धन्यवाद

उत्तर

10

आधार में aggregate का उपयोग करना:

> aggregate(.~FILE, data= DF[, -2], FUN=diff) 
    FILE COUNT 
1 A 15 
2 B 25 
3 C 20 

plyr में ddply का उपयोग

> ddply(DF[,-2], .(FILE), summarize, DIFFERENCE=diff(COUNT)) 
    FILE DIFFERENCE 
1 A   15 
2 B   25 
3 C   20 

data.table

> # library(data.table) 
> DT <- data.table(DF) 
> DT[, diff(COUNT), by=FILE] 
    FILE V1 
1: A 15 
2: B 25 
3: C 20 

वाई के साथ वें by

> with(DF, by(COUNT, FILE, diff)) 
FILE: A 
[1] 15 
----------------------------------------------------------------------------- 
FILE: B 
[1] 25 
----------------------------------------------------------------------------- 
FILE: C 
[1] 20 

tapply

> tapply(DF$COUNT, DF$FILE, diff) 
A B C 
15 25 20 
summaryBy साथ डोबी पैकेज से

साथ

> # library(doBy) 
> summaryBy(COUNT~FILE, FUN=diff, data=DF) 
    FILE COUNT.diff 
1 A   15 
2 B   25 
3 C   20 

अद्यतन प्रतिशत के रूप में:

> aggregate(.~FILE, data= DF[, -2], function(x) (x[1]/x[2])*100) 
    FILE COUNT 
1 A 40.00000 
2 B 16.66667 
3 C 60.00000 
+0

+1। अब आपको कम से कम 'data.table' और' by' 'जोड़ना होगा, – A5C1D2H2I1M1N2O1R2T1

+0

सबसे पहले, शानदार उत्तरों के लिए धन्यवाद और विविधता के लिए धन्यवाद - आप गंभीर रूप से रोल पर हैं (और मैं आपका जवाब स्वीकार करूंगा पल)। एक अंतिम जोड़ा - मैं इसे मूल के प्रतिशत के रूप में कैसे गणना कर सकता हूं? (उदाहरण के लिए ए 40% बन जाएगा)। मैं समझता हूं कि इसमें भिन्नता के अलावा कुछ और उपयोग करना शामिल होगा, है ना? – obfuscation

+0

जहां वह 40% से आता है? –

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