2017-09-22 3 views
0

Je viens de lire le manuel de Benjamin, Modern Data Science avec R. À la page 180, je trouve la fonction utile tally() similaire à table() ou une fonction crosstable. Mais je ne peux pas reproduire cette fonction dans mon r.Quelle est la bonne façon d'utiliser la fonction R `tally()` de `tidyverse` par catégorie différente?

L'auteur utilise cette fonction de cette façon tally(income_dtree ~ income, data = train, format = "count").

Je simule un exemple, mais échoue.

library(dplyr) 
data_frame(
    x = rnorm(100), 
    y = c(rep("A",50),rep("B",50)) 
) %>% 
    tally(~y) 

Le message d'avertissement est Error in summarise_impl(.data, dots) : Evaluation error: invalid 'type' (language) of argument.

Est-ce que quelqu'un sait comment l'utiliser?


Thx pour @ycw. La réponse est ici.

library(tidyverse) 
library(mosaic) 
data_frame(
    x = rnorm(100), 
    y = c(rep("A",50),rep("B",50)), 
    z = c(rep("C",70),rep("D",30)), 
) %>% 
    tally(~ y + z, data = .) 

    z 
y C D 
    A 50 0 
    B 20 30 

Et les utilisateurs doivent ajouter le data = . dans le tally() même ils utilisent des tuyaux.

Répondre

2

C'est probablement ce que vous voulez:

library(dplyr) 

data_frame(
    x = rnorm(100), 
    y = c(rep("A",50),rep("B",50))) %>% 
    group_by(y) %>% 
    tally() 

# A tibble: 2 x 2 
     y  n 
    <chr> <int> 
1  A 50 
2  B 50 

Quelle est la même que suit

data_frame(
    x = rnorm(100), 
    y = c(rep("A",50),rep("B",50))) %>% 
    count(y) 

# A tibble: 2 x 2 
     y  n 
    <chr> <int> 
1  A 50 
2  B 50 

Ou cette

data_frame(
    x = rnorm(100), 
    y = c(rep("A",50),rep("B",50))) %>% 
    group_by(y) %>% 
    summarise(n = n()) 

# A tibble: 2 x 2 
     y  n 
    <chr> <int> 
1  A 50 
2  B 50 
+0

Merci pour votre réponse. Salut, je sais simple 'tally' et' group_by' & "summarize()'. Je suis juste curieux de savoir comment l'auteur fait de cette façon.Savez-vous comment le reproduire? – Jiaxiang

+1

@Jiaxiang Vous regardez probablement le 'tally 'Fonctionne à partir du paquetage mosaïque, pas du paquet' dplyr' Voir ce lien pour la documentation (https://www.rdocumentation.org/packages/mosaic/versions/1.1.0/topics/tally) – www

+0

Thx, ça marche pour Je trouve même en utilisant des pipes, les utilisateurs doivent ajouter 'data = .' dans le' tally() '. – Jiaxiang