अद्वितीय संयोजन और उनकी आवृत्ति उत्पन्न करने के लिए R में कोई समाधान है?

Dec 09 2020

यहाँ मेरा कोड है। मैं खाद्य कॉलम के सभी गैर-दोहराए जाने वाले संयोजनों को उत्पन्न करने की कोशिश कर रहा हूं और कितनी बार यह आईडी कॉलम दिया गया है।


customerDataFrame <- data.frame(CustomerID = c('A', 'B', 'B', 'C', 'D', 'D'),
                                Food = c('Pizza', 'Pizza', 'Tacos', 'Tacos', 'Tacos', 'Pizza'))

customerDataFrame %>% 
  group_by(CustomerID) %>% 
  summarise_all(funs(toString(unique(.)))) %>%
  ungroup() %>%
  group_by(Food) %>%
  summarise(n= n())

यहाँ अभी आउटपुट है:

# A tibble: 4 x 2
  Food             n
  <chr>        <int>
1 Pizza            1
2 Pizza, Tacos     1
3 Tacos            1
4 Tacos, Pizza     1

यह तकनीकी रूप से गलत है क्योंकि खरीदने वाले ग्राहक (पिज्जा, टैकोस) और (टैकोस, पिज्जा) एक ही समूह में होने चाहिए। इससे कोई फर्क नहीं पड़ता कि वे किस ऑर्डर में खरीदारी करते हैं।

(मुझे इस उत्तर से कोड मिला: किसी समूह के लिए मूल्यों के अनूठे संयोजन के वेक्टर बनाने के लिए dplyr का उपयोग करना )

यहाँ मैं क्या पाने की कोशिश कर रहा हूँ:

# A tibble: 4 x 2
  Food             n
  <chr>        <int>
1 Pizza            1
2 Pizza, Tacos     2
3 Tacos            1

जवाब

3 Duck Dec 09 2020 at 21:15

इसे इस्तेमाल करे। summarise()अपेक्षित परिणाम प्राप्त करने के लिए आप दोगुना कर सकते हैं :

library(dplyr)
#Code
new <- customerDataFrame %>%
  arrange(CustomerID,Food)%>%
  group_by(CustomerID) %>%
  summarise(Food=paste0(Food,collapse = ',')) %>%
  group_by(Food,.drop = T) %>%
  summarise(N=n())

आउटपुट:

# A tibble: 3 x 2
  Food            N
  <chr>       <int>
1 Pizza           1
2 Pizza,Tacos     2
3 Tacos           1

उसी आउटपुट का उपयोग करके पहुंचा जा सकता है toString():

#Code 2
new <- customerDataFrame %>%
  arrange(CustomerID,Food)%>%
  group_by(CustomerID) %>%
  summarise(Food=toString(Food)) %>%
  group_by(Food,.drop = T) %>%
  summarise(N=n())
3 RonakShah Dec 09 2020 at 21:25

आप उपयोग कर गिर रहे हैं ।toString sortFood

library(dplyr)

customerDataFrame %>% 
  group_by(CustomerID) %>% 
  summarise(Food = toString(sort(Food))) %>%
  count(Food)

#   Food            n
#  <chr>        <int>
#1 Pizza            1
#2 Pizza, Tacos     2
#3 Tacos            1
akrun Dec 10 2020 at 03:33

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

table(aggregate(Food ~ CustomerID, 
   customerDataFrame[do.call(order, customerDataFrame),], FUN = toString)$Food)

#  Pizza Pizza, Tacos        Tacos 
#      1            2            1