2017-10-11 6 views
1

Ce qui suit est une base de données (DF) avec un ensemble de campagnes marketing que j'ai menées. Le pourcentage de réussite indique le nombre de répondants, et le type de communication fait référence à la chaîne facebook, twitter, etc. (Ai- FB, L1-Linkedin). Ordinateur portable, Nouveau et souris se réfèrent aux mots qui composent la phrase. Le dataframe original avait une phrase - dire Acheter un nouvel ordinateur portable et obtenir une souris gratuite. J'ai analysé le ci-dessus avec qdap et généré DF ci-dessous.Production de sous-ensembles dans R pour générer des résumés

Sl NO Success_Percentage communication_type Laptop New Mouse 
    1 35.46666667    email    1  0  0 
    2 32.32830821    email    1  0  1 
    3 22.9226361    SMS    0  1  0 

    4 21.88888889    SMS    1  1  0 
    5 40.04085802    FB     0  1  1 
    6 38.7283237    FB     1  0  1 

J'ai trié DF en fonction du type de communication. Les valeurs sous les trois mots qui composent la phrase indiquent si les mêmes étaient présents dans la phrase originale envoyée pendant la communication.

Les mots-clés les plus fréquents dans toutes les communications sont données par le code suivant

Wordlist2<-as.data.frame(colSums(DF)[colSums(DF)>0]) 

la sortie pour Wordlist2 est comme suit

Laptop 4 
    New  3 
    Mouse 3 

Je veux savoir comment obtenir la sortie ci-dessus subsetted par type de communication. Cela peut être fait manuellement mais j'aimerais savoir s'il existe un paquet qui peut le faire.

require(dplyr) 
    DF%>% 
    group_by(communication_type, Success_Percentage)%>% 
    summarise(colSums(DF)) 

Mais cela ne fonctionne pas.

+0

Êtes-vous sûr que vous voulez par groupe 'Success_Percentage'? C'est une valeur continue, et unique dans votre exemple –

Répondre

0

Je ne suis pas tout à fait sûr que c'est ce que vous voulez, mais en tout cas, je suis sûr que vous voulez summarise_at:

DF <- read.table(text="Sl_NO Success_Percentage communication_type Laptop New Mouse 
    1 35.46666667    email    1  0  0 
    2 32.32830821    email    1  0  1 
    3 22.9226361    SMS    0  1  0 
    4 21.88888889    SMS    1  1  0 
    5 40.04085802    FB     0  1  1 
    6 38.7283237    FB     1  0  1",stringsAsFactors=F,header=T) 

require(dplyr) 
DF %>% group_by(communication_type) %>% summarise_at(c("Laptop","New","Mouse"),sum) 

# # A tibble: 3 x 4 
# communication_type Laptop New Mouse 
#    <chr> <int> <int> <int> 
# 1    email  2  0  1 
# 2     FB  1  1  2 
# 3    SMS  1  2  0 
+0

Merci. J'avais besoin de sous-ensemble des colonnes, mais cela a fonctionné à merveille. –

1

Je ne pas utiliser dplyr, mais j'ai une solution pour data.table:

#---Input data 
DF <- read.table(text = "Sl_NO Success_Percentage communication_type Laptop New Mouse 
         1 35.46666667    email    1  0  0 
         2 32.32830821    email    1  0  1 
         3 22.9226361    SMS    0  1  0 
         4 21.88888889    SMS    1  1  0 
         5 40.04085802    FB     0  1  1 
         6 38.7283237    FB     1  0  1", header = T) 

DF <- as.data.table(DF) #---Convert DF from data.frame to data.table 

DF[, .N, by = communication_type] 

Produit:

communication_type N 
1:    email 2 
2:    SMS 2 
3:     FB 2 

modifier:

DF[, .(Laptop = sum(Laptop), New = sum(New), Mouse = sum(Mouse)), by = communication_type] 

Produit:

communication_type Laptop New Mouse 
1:    email  2 0  1 
2:    SMS  1 2  0 
3:     FB  1 1  2 
+0

assez bonne solution – amonk

+0

Neat. C'est simple. –