गणना कॉलम में प्रतिशत के आधार पर अन्य स्तंभों के लिए विशेष रूप से श्रेणी में आर

0

सवाल

मैं एक शुरुआत के साथ अनुसंधान और मदद की जरूरत है के साथ काम. उत्पादन की डमी डेटासेट के साथ dput (वास्तविक सेट वास्तव में बड़ा है):

structure(list(CODE = c(453, 463, 476, 
798, 885, 582, 626, 663, 457, 408
), CATEGORY = c("CIG", "BET", "CIG", "CIG", "ARI", "CRR", "ARI", "CIG", 
"CIG", "BET"), AMOUNT = c(22, 5, 6, 52, 16, 11, 6, 70, 208, 5), 
    PRICE = c(5.56, 8.29, 3.89, 3.8, 4.05, 3.99, 3.55, 7.69, 6.75, 
    5.2), BRAND = c("ROTHMANS", "ALLINO", "MARLBORO", "ROTHMANS", "AURIELO", 
    "SOLINOS", "CHLEBLO", "MARLBORO", "LD", "SOLINOS"
    )), row.names = c(NA, -10L), class = c("tbl_df", 
"tbl", "data.frame"))

क्या किया जाना चाहिए: एक स्तंभ होगा जो दिखाने के शेयर में हर ब्रांड के प्रतिशत में जोड़ा जाना चाहिए. पहले मैं क्या किया है है बनाने के लिए एक नया स्तंभ "मान" इस तरह से है:

df$VALUE <- with(df, AMOUNT*PRICE)

अब स्तंभ का हिस्सा बनाया जाना चाहिए में इस तरह के एक तरीका है: योग के मूल्यों से (स्तंभ मान) की एक विशेष ब्रांड में एक विशेष वर्ग से विभाजित राशि के मूल्यों की पूरी श्रेणी. उदाहरण के लिए, "ROTHMANS है" श्रेणी में CIG, मूल्यों की राशि के लिए यह है 319.92, योग के लिए पूरी CIG श्रेणी है 2285,56, तो, शेयर=14%. और यह गणना की जानी चाहिए प्रत्येक मामले में. मुझे लगता है कि dplyr पुस्तकालय उपयुक्त हो सकता है, लेकिन एक समाधान नहीं ढूँढ सकता.

calculated-columns dataframe dplyr r
2021-10-27 13:19:23
3

सबसे अच्छा जवाब

1

आप कर सकते हैं पहली बार sum के BRAND मूल्य और अनुपात के लिए प्रत्येक CATEGORY.

library(dplyr)

df %>%
  group_by(CATEGORY, BRAND) %>%
  summarise(VALUE = sum(VALUE)) %>%
  mutate(SHARE = prop.table(VALUE) * 100) %>%
  ungroup

#  CATEGORY BRAND     VALUE SHARE
#  <chr>    <chr>     <dbl> <dbl>
#1 ARI      AURIELO    64.8  75.3
#2 ARI      CHLEBLO    21.3  24.7
#3 BET      ALLINO     41.4  61.5
#4 BET      SOLINOS    26    38.5
#5 CIG      LD       1404    61.4
#6 CIG      MARLBORO  562.   24.6
#7 CIG      ROTHMANS  320.   14.0
#8 CRR      SOLINOS    43.9 100  
2021-10-27 13:24:05

लग रहा है कि एक नया स्तंभ है अच्छी तरह से गणना की है, लेकिन क्यों अन्य स्तंभ (कोड, राशि, मूल्य) गायब हो जाते हैं? वास्तव में, वे किया जाना चाहिए अंतिम सेट में भी है. @RonakShah
Bambeil

सुनिश्चित करें कि आप जोड़ सकते हैं %>% left_join(df, by = c("CATEGORY", "BRAND")) उन्हें वापस पाने के लिए, लेकिन ध्यान दें कि अपने मूल के बाद से df है डुप्लिकेट पंक्तियों प्रत्येक ब्रांड के लिए अंतिम उत्पादन होता है ।
Ronak Shah
1

एक data.table समाधान हो सकता है:

library(data.table)

res <- setDT(df)[,'.'(VALUE = sum(VALUE)), by = list(CATEGORY,BRAND)
               ][,':='(SHARE = round(VALUE/sum(VALUE)*100,2)), by = list(CATEGORY)]

res
  CATEGORY    BRAND   VALUE  SHARE
1:      CIG ROTHMANS  319.92  14.00
2:      BET   ALLINO   41.45  61.45
3:      CIG MARLBORO  561.64  24.57
4:      ARI  AURIELO   64.80  75.26
5:      CRR  SOLINOS   43.89 100.00
6:      ARI  CHLEBLO   21.30  24.74
7:      CIG       LD 1404.00  61.43
8:      BET  SOLINOS   26.00  38.55

संपादित करें

रखने के लिए मूल मूल्यों हो सकता है:इस

res <- setDT(df)[,'.'(VALUE = sum(VALUE)), by = list(CATEGORY,BRAND)
               ][,':='(SHARE = round(VALUE/sum(VALUE)*100,2)), by = list(CATEGORY)
               ][setDT(df), on = c('BRAND','CATEGORY')
               ][,-('i.VALUE')]
res

    CATEGORY    BRAND   VALUE  SHARE CODE AMOUNT PRICE
 1:      CIG ROTHMANS  319.92  14.00  453     22  5.56
 2:      BET   ALLINO   41.45  61.45  463      5  8.29
 3:      CIG MARLBORO  561.64  24.57  476      6  3.89
 4:      CIG ROTHMANS  319.92  14.00  798     52  3.80
 5:      ARI  AURIELO   64.80  75.26  885     16  4.05
 6:      CRR  SOLINOS   43.89 100.00  582     11  3.99
 7:      ARI  CHLEBLO   21.30  24.74  626      6  3.55
 8:      CIG MARLBORO  561.64  24.57  663     70  7.69
 9:      CIG       LD 1404.00  61.43  457    208  6.75
10:      BET  SOLINOS   26.00  38.55  408      5  5.20
2021-10-27 14:00:19

लग रहा है कि एक नया स्तंभ है अच्छी तरह से गणना की है, लेकिन क्यों अन्य स्तंभ (कोड, राशि, मूल्य) गायब हो जाते हैं? वास्तव में, वे किया जाना चाहिए अंतिम सेट में भी है. @s__
Bambeil

क्योंकि कोड समूह और सारांश. मामले में आप इसे शामिल कर सकते हैं करने के लिए मूल df प्राप्त करने के लिए उन infos लेकिन आप शिकार के SHARE और VALUE परिणाम (गणना VALUE).
s__

@Bambeil देखने के लिए संपादित स्पष्टीकरण.
s__
1

हम का उपयोग कर सकते हैं base R

transform(aggregate(VALUE ~ CATEGORY + BRAND, df, sum), 
    SHARE = ave(VALUE, CATEGORY, FUN = proportions) * 100)
  CATEGORY    BRAND   VALUE     SHARE
1      BET   ALLINO   41.45  61.45293
2      ARI  AURIELO   64.80  75.26132
3      ARI  CHLEBLO   21.30  24.73868
4      CIG       LD 1404.00  61.42915
5      CIG MARLBORO  561.64  24.57341
6      CIG ROTHMANS  319.92  13.99744
7      BET  SOLINOS   26.00  38.54707
8      CRR  SOLINOS   43.89 100.00000
2021-10-27 13:37:37

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में