अद्वितीय संयोजन और उनकी आवृत्ति उत्पन्न करने के लिए R में कोई समाधान है?
यहाँ मेरा कोड है। मैं खाद्य कॉलम के सभी गैर-दोहराए जाने वाले संयोजनों को उत्पन्न करने की कोशिश कर रहा हूं और कितनी बार यह आईडी कॉलम दिया गया है।
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
जवाब
इसे इस्तेमाल करे। 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())
आप उपयोग कर गिर रहे हैं ।toString
sort
Food
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
में base R
, हम के table
साथ उपयोग कर सकते हैंaggregate
table(aggregate(Food ~ CustomerID,
customerDataFrame[do.call(order, customerDataFrame),], FUN = toString)$Food)
# Pizza Pizza, Tacos Tacos
# 1 2 1