2016-03-15 1 views
0

J'essaie de simplifier cela avec quelques instructions. Je ne sais pas comment s'y prendre (ou si je peux), mais tous ceux qui peuvent me rapprocher ou aussi peu que possible. J'utilise dplyr et lubrifier. J'ai une base de données appelée OutofRange (échantillon);dplyr group_by valeurs logiques

OutOfRange %>% select(OutRange, TouchVPOC) 
Source: local data frame [341 x 2] 

    OutRange TouchVPOC 

    (lgl)  (lgl) 

1  FALSE  TRUE 
2  FALSE  FALSE 
3  FALSE  TRUE 
4  FALSE  FALSE 
5  FALSE  TRUE 

OutOfRange %>% select(OutRange, TouchVPOC) %>% filter(OutRange == T) %>% tally 
Source: local data frame [1 x 1] 

     n (int) 
1 37 

OutOfRange %>% select(OutRange, TouchVPOC) %>% filter(OutRange == T, TouchVPOC == T) %>% tally 
Source: local data frame [1 x 1] 

     n (int) 
1 15 

15/37 
[1] 0.4054054 

Donc, si possible, je suis à la recherche d'un résultat final de quelque chose comme ça, où CountofDataFrame est le nombre de toutes les lignes; où OutRange & TouchVPOC représente le nombre de valeurs TRUE; et Pct = TouchVPOC/OutRange. Je me rends compte, je me demande peut-être beaucoup .. et je suis nouveau à cela, toutes les suggestions sont les bienvenues. Juste à la recherche d'une base ou d'un départ dans la bonne direction.

+2

S'il vous plaît lire les informations sur [comment poser une bonne question] (http://stackoverflow.com/help/how-to-ask) et comment donner un [exemple reproductible] (http: // stackoverflow.com/questions/5963269). Cela rendra beaucoup plus facile pour les autres de vous aider. – zx8754

+0

Quelques publications * agrégées * pertinentes: [R Fonctions de regroupement: spply vs lapply vs apply. vs tapply vs par vs. aggregate] (http://stackoverflow.com/questions/3505701), [Aggregate multiple variables simultanément] (http://stackoverflow.com/questions/9723208), [Comment additionner une variable par groupe?] (http://stackoverflow.com/q/1660124) – zx8754

+0

Pour vous donner une idée, essayez 'sum (c (TRUE, FALSE, TRUE))'. – zx8754

Répondre

0

Je vous suggère d'abord d'obtenir les données au format bien rangé, puis d'utiliser group_by/summarize/mute pour effectuer l'agrégation et le calcul du pourcentage comme ci-dessous.

a <- data.frame(OutRange = c(TRUE, FALSE, FALSE, FALSE, FALSE), 
      TouchVPOC = c(TRUE, TRUE, TRUE, FALSE, FALSE)) 

> a 
    OutRange TouchVPOC 
1  TRUE  TRUE 
2 FALSE  TRUE 
3 FALSE  TRUE 
4 FALSE  FALSE 
5 FALSE  FALSE 

library(tidyr) 
a %>% 
    gather(type, value, OutRange:TouchVPOC) %>% 
    group_by(type) %>% 
    summarize(true_count = sum(value)) %>% 
    mutate(total = sum(true_count), Pct = true_count/total) 

Source: local data frame [2 x 4] 

     type true_count total Pct 
     (chr)  (int) (int) (dbl) 
1 OutRange   1  4 0.25 
2 TouchVPOC   3  4 0.75 
+0

Merci! Je n'ai pas réalisé que Tidyr fonctionne de cette façon. Ouvre de nouvelles portes pour moi. Après avoir couru ceci, j'ai réalisé que j'aurais besoin d'une pré-étape dans le filtrage de mes données. Mais j'ai été en mesure d'ajouter des colonnes dans la table, au moment de la mutation des données d'origine. En d'autres termes, au lieu de filtrer, j'ai muté une nouvelle colonne appelée OutRange_Touch; qui a fait l'affaire! – marts01