मेरे पास एक group कॉलम और दूसरा कॉलम cyl वाला डेटासेट है जिसमें केवल दो मान हैं। मैं group में प्रत्येक समूह के लिए cyl में से किसी एक मान के अनुपात की गणना करना चाहता हूं।

मैं इसे कई चरणों में कर सकता हूं जिसमें नए डेटासेट बनाना और full_join का उपयोग करना शामिल है, हालांकि मैं सोच रहा हूं कि ऐसा करने का एक और अधिक कुशल तरीका है क्योंकि मैं जिस डेटासेट के साथ काम करता हूं वह बड़ा है।

library(dplyr)

dat <- mtcars %>% filter(cyl >=6) 
dat$group <- seq(1:3)

cyl_6 <- dat %>% filter(cyl == 6) %>% group_by(group) %>% 
  summarise(count_6 = n())
cyl_8 <- dat %>% filter(cyl == 8) %>% group_by(group) %>% 
  summarise(count_8 =n())

cyl_data <- cyl_6 %>% full_join(cyl_8) %>% 
                  mutate(six_cyl_prop = count_6/(count_6 + count_8))

cyl_data

group six_cyl_prop
    1        0.286
    2        0.571
    3        0.143
1
Tjn25 11 अक्टूबर 2021, 06:19

1 उत्तर

सबसे बढ़िया उत्तर

किसी शर्त को पूरा करने वाली पंक्तियों की संख्या को गिनने का मूल तरीका है sum() शर्त - TRUE की गिनती 1 है और FALSE की संख्या 0 है। इसी तरह, पंक्तियों का अनुपात प्राप्त करने के लिए एक शर्त को पूरा करें आप उस शर्त का mean() ले सकते हैं:

dat %>%
  group_by(group) %>%
  summarize(six_cyl_prop = mean(cyl == 6))
# # A tibble: 3 × 2
# group six_cyl_prop
# <int>        <dbl>
# 1     1        0.286
# 2     2        0.571
# 3     3        0.143
3
Gregor Thomas 11 अक्टूबर 2021, 06:22