Question

J'ai des données désordonnées dans une trame de données qui ressemble à ceci.

Ici vous pouvez voir dans « équipe » les noms de certaines équipes de football.Name1-3 sont des variables répertoriant les différents noms utilisés pour désigner ces équipes dans la première colonne.

               team             name1        name2      name3
1      Loughborough      Loughborough                        
2        Luton Town        Luton Town        Luton           
3      Macclesfield      Macclesfield                        
4  Maidstone United  Maidstone United                        
5   Manchester City   Manchester City     Man City           
6 Manchester United Manchester United Newton Heath Man United
7    Mansfield Town    Mansfield Town    Mansfield           
8      Merthyr Town      Merthyr Town                        

Mon objectif est de regrouper les données en 2 colonnes avec des paires team-name1, team-name2, team-name3.Je souhaite uniquement conserver les paires où il y a des données dans name1, name2 ou name3.

Pour ce faire, j'essaie de ranger's- gather()

temp <- dat %>% gather(key, value, 2:4) 
temp$key<-NULL
temp

Cela donne le résultat suivant :

                team             value
1       Loughborough      Loughborough
2         Luton Town        Luton Town
3       Macclesfield      Macclesfield
4   Maidstone United  Maidstone United
5    Manchester City   Manchester City
6  Manchester United Manchester United
7     Mansfield Town    Mansfield Town
8       Merthyr Town      Merthyr Town
9       Loughborough                  
10        Luton Town             Luton
11      Macclesfield                  
12  Maidstone United                  
13   Manchester City          Man City
14 Manchester United      Newton Heath
15    Mansfield Town         Mansfield
16      Merthyr Town                  
17      Loughborough                  
18        Luton Town                  
19      Macclesfield                  
20  Maidstone United                  
21   Manchester City                  
22 Manchester United        Man United
23    Mansfield Town                  
24      Merthyr Town                  

J'ai essayé de supprimer les cas incomplets (par ex.lignes 20,21, 23,24 mais pas 22), en utilisant :

temp[complete.cases(temp),]

Cela n'a pas fonctionné car les observations de valeurs apparemment vides contiennent un caractère "" - je suppose que c'est ainsi que gather() renvoie les données manquantes ?.J'ai essayé de convertir temp$value à un facteur mais cela n'a pas fonctionné non plus.

J'aimerais savoir comment se débarrasser des dossiers incomplets.

Exemples de données...

dat<-structure(list(team = structure(1:8, .Label = c("Loughborough", 
"Luton Town", "Macclesfield", "Maidstone United", "Manchester City", 
"Manchester United", "Mansfield Town", "Merthyr Town"), class = "factor"), 
    name1 = structure(1:8, .Label = c("Loughborough", "Luton Town", 
    "Macclesfield", "Maidstone United", "Manchester City", "Manchester United", 
    "Mansfield Town", "Merthyr Town"), class = "factor"), name2 = structure(c(1L, 
    2L, 1L, 1L, 3L, 5L, 4L, 1L), .Label = c("", "Luton", "Man City", 
    "Mansfield", "Newton Heath"), class = "factor"), name3 = structure(c(1L, 
    1L, 1L, 1L, 1L, 2L, 1L, 1L), .Label = c("", "Man United"), class = "factor")), .Names = c("team", 
"name1", "name2", "name3"), row.names = c(NA, -8L), class = "data.frame")
Était-ce utile?

La solution

Vous pourriez également ajouter filter (afin de supprimer les blancs) et select (afin de supprimer key colonne) de dplyr emballez et obtenez tout en une seule fois

temp <- dat %>% 
  gather(key, value, 2:4) %>% 
  filter(value != "") %>%
  select(-key)

#                 team             value
# 1       Loughborough      Loughborough
# 2         Luton Town        Luton Town
# 3       Macclesfield      Macclesfield
# 4   Maidstone United  Maidstone United
# 5    Manchester City   Manchester City
# 6  Manchester United Manchester United
# 7     Mansfield Town    Mansfield Town
# 8       Merthyr Town      Merthyr Town
# 9         Luton Town             Luton
# 10   Manchester City          Man City
# 11 Manchester United      Newton Heath
# 12    Mansfield Town         Mansfield
# 13 Manchester United        Man United

Autres conseils

Cherchez-vous: temp[temp$value!='',]? gather n'est pas à blâmer pour les chaînes vides, vos données initiales les contenaient également.Vous pouvez d'abord les remplacer, puis utiliser le na.rm argument dans gather:

dat[dat==''] <- NA
temp <- dat %>% gather(key, value, 2:4, na.rm=TRUE) 
temp$key<-NULL
tempA

approche similaire, mais en utilisant na.omit :

dat %>% 
  gather(key, value, -team) %>% 
  select(-key) %>%
  mutate(value = ifelse(value == "", NA, value)) %>%
  na.omit %>%
  arrange(team)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top