2
votes

Compter la fréquence de même valeur dans plusieurs colonnes

Je suis assez nouveau dans R et je suis confronté à un problème qui, je suppose, est assez facile à résoudre, mais je n'ai pas trouvé de réponse.

J'ai un dataframe appelé clg où fondamentalement j'ai 3 colonnes date, X1, X2 . X1 et X2 sont le nom des équipes de pays. X1 et X2 ont la même liste de pays.

J'essaie simplement de compter la fréquence de chaque pays dans les deux colonnes comme un total .

Jusqu'à présent, je n'ai pu compter que la fréquence de la colonne X1 mais je n'ai pas trouvé de moyen de additionner les deux colonnes.

clt <- as_tibble(na.omit(count(clg, clg$X1)))

Je voudrais obtenir un bloc de données où dans les premières colonnes j'ai des pays uniques, et dans la deuxième colonne la somme des occurrences dans X1 + X2 . p>

r

0 commentaires

3 Réponses :


0
votes

Vous pouvez atteindre votre objectif en deux étapes. Dans la première étape, vous calculez la somme des occurrences pour chaque pays. Dans l'étape suivante, vous joignez les deux df ensemble et calculez la somme totale.

   X1_sum <- df %>%
      dplyr::group_by(X1) %>%
      dplyr::summarize(n_x1 = n())

   X2_sum <- df %>%
      dplyr::group_by(X2) %>%
      dplyr::summarize(n_x2 = n()

   final_summary <- X1_sum %>%
      # merging data with by country names
      dplyr::left_join(., X2_sum, by = c("X1", "X2")) %>%
      dplyr::mutate(n_sum = n_x1 + n_x2)


0 commentaires

2
votes

Vous pouvez utiliser unlist () et table () pour obtenir les décomptes globaux. En l'enveloppant dans data.frame () , vous obtiendrez la sortie à deux colonnes souhaitée.

clg <- data.frame(date=1:3, 
                  X1=c("nor", "swe", "alg"), 
                  X2=c("swe", "alg", "jpn"))

data.frame(table(unlist(clg[c("X1", "X2")])))
#   Var1 Freq
# 1  alg    2
# 2  nor    1
# 3  swe    2
# 4  jpn    1


0 commentaires

1
votes

Avec tidyverse , nous pouvons rassembler au format 'long' puis effectuer le count

clg <- structure(list(date = 1:3, X1 = structure(c(2L, 3L, 1L), .Label = c("alg", 
"nor", "swe"), class = "factor"), X2 = structure(c(3L, 1L, 2L
), .Label = c("alg", "jpn", "swe"), class = "factor")),
   class = "data.frame", row.names = c(NA, 
-3L))

données

library(tidyverse)
gather(clg, key, Var1, -date) %>%
     count(Var1)
# A tibble: 4 x 2
#  Var1      n
#  <chr> <int>
#1 alg       2
#2 jpn       1
#3 nor       1
#4 swe       2


0 commentaires