2016-06-09 1 views
0

J'ai un grand ensemble de données (> 37 m individus) et j'utilise R. Je suis un débutant. Actuellement, j'essaie (et j'essaie et j'essaie) de calculer la taille moyenne des ménages par province dans le pays que j'analyse. J'ai réussi à créer une trame de données séparée, avec les variables requises pour donner un numéro individuel à chaque personne et donc un numéro de ménage sous la variable appelée HH (pour HouseHolds). Maintenant, je veux que R supprime les doublons de cette colonne spécifique dans le nouveau bloc de données que j'ai créé, c'est-à-dire la colonne HH.Enlever des doublons dans R

J'ai essayé plusieurs fois d'utiliser les fonctions duplicate() et unique() mais cela ne fonctionne pas. J'ai également essayé d'isoler la colonne "HH" dans une feuille séparée mais ces fonctions ne suppriment toujours pas les doublons. J'ai également essayé de le convertir en un vecteur, puis en faisant les fonctions duplicate() et unique() (comme vous pouvez le voir ci-dessous). Lorsque j'utilise un plus petit échantillon dans Excel, cela fonctionne parfaitement bien (en demandant d'exceler les doublons).

Voilà comment je créé mon jeu de données basé sur mon jeu de données initial (c.-à-PHCKCON):

HHvars<-c("eano", "county", "tif") 
HHKE<-PHCKCON[HHvars] 
as.numeric(HHKE$county) 
HHKE$county<-as.numeric(HHKE$county) 

Puis j'ai créé une 4ème colonne pour mes ménages:

HHKE$HH<-(paste(HHKE$eano, HHKE$county, HHKE$tif)) 

Voici un exemple de mon jeu de données: The values in the first three columns are numeric whilst the last are classified as characters

Voici un petit échantillon des données (j'ai inventé ces mêmes mais idée):

Enumeration.area County Household.members 
1     a   4 
1     a   4 
1     a   6 
1     a   6 
1     a   8 
1     a   8 
1     a   8 
2     a   4 
2     a   4 
2     a   6 
1     b   6 
1     b   6 
1     b   8 
1     b   8 
1     b   12 
1     b   12 
1     b   12 
1     b   12 

Et voici ce que je l'ai fait pour créer ma 4e colonne appelée HH:

mydata$HH<-paste(mydata$Enumeration.area, mydata$County, mydata$Household.members) 

Il donne alors une quatrième colonne.

HH 
1 a 4 
1 a 4 
1 a 6 
1 a 6 
1 a 8 
1 a 8 
1 a 8 
1 a 8 
2 a 4 
2 a 4 
2 a 6 
2 a 8 
1 b 6 
1 b 6 
1 b 8 
1 b 8 
1 b 12 
1 b 12 
1 b 12 
1 b 12 

Ensuite, je créé un ensemble de données séparé pour ma colonne HH (afin de dupliquer):

attach(mydata) 
HHvars<-c("HH") 
EX2<-mydata[HHvars] 

J'ai ensuite essayé de reproduire EX2, HH Colum:

EX2[!duplicated(EX2$HH),] 

Mais ne fonctionne pas. Et pas lors de l'utilisation du

unique() 

fonction non plus.

J'espère que c'est plus clair! Et toujours reconnaissant pour toute aide.

Cheers, Madeleine

+1

Alors qu'est-ce que vous essayez de faire exactement? Pourriez-vous donner un exemple de la sortie que vous essayez? Et pourriez-vous clarifier ce que représentent ces variables dans vos colonnes? –

+0

Je ne sais pas comment expliquer ça ... Le résultat final que je veux, c'est que R me dise la taille moyenne du ménage. Pour l'instant, R ne résume pas toutes les mêmes réponses. –

+1

Publiez un exemple d'entrée avec les noms de colonne appropriés et l'exemple de sortie souhaité. Vous pouvez créer vous-même ces petites données d'entrée/sortie dans R et les afficher en tant que modification de votre question. C'est le meilleur moyen d'obtenir de l'aide. – Gopala

Répondre

0

Si ce que vous demandez est tout simplement la moyenne et la médiane pour chaque comté de chaque enumeration.area, vous pouvez le faire plutôt rapidement à l'aide dplyr. J'ai composé quelques données ci-dessous pour correspondre à la vôtre.

library(dplyr) 
HH <- data.frame(
    Enumeration.area=c(1,1,1,2,2,2,3,3,3), 
    County=c('a','a','b','a','a','a','b','a','b'), 
    Household.members=c(4,6,5,8,10,9,3,4,3) 
) 
HH %>% group_by(Enumeration.area,County) %>% summarise(mean=mean(Household.members),median=median(Household.members)) 

qui se traduit par:

 Enumeration.area County mean median 
       (dbl) (fctr) (dbl) (dbl) 
1    1  a  5  5 
2    1  b  5  5 
3    2  a  9  9 
4    3  a  4  4 
5    3  b  3  3 

Ensuite, chaque ligne de l'ensemble de données résultant est une combinaison unique de Enumeration.area et le comté, et vous aurez pour chacune de ces combinaisons votre moyenne et nombre médian de ménages.

modifier:

Depuis votre sortie désirée est en ce qui concerne la création d'un identifiant concaténés pour chaque observation, voici comment vous pouvez faire:

df <- HH %>% group_by(Enumeration.area,County) %>% 
    mutate(id=paste(Enumeration.area,County,Household.members)) 

Cela va créer une chaîne de caractères qui est la combinaison de Enumeration.area, County et Household.members. Ensuite, en utilisant distinct(id) supprimera les doublons, comme indiqué ci-dessous:

df 
    Enumeration.area County Household.members  id 
       (dbl) (fctr)    (dbl) (chr) 
1    1  a     4 1 a 4 
2    1  a     6 1 a 6 
3    1  b     5 1 b 5 
4    2  a     8 2 a 8 
5    2  a    10 2 a 10 
6    2  a     9 2 a 9 
7    3  b     3 3 b 3 
8    3  a     4 3 a 4 
9    3  b     3 3 b 3 

df %>% distinct(id) 
    Enumeration.area County Household.members  id 
      (dbl) (fctr)    (dbl) (chr) 
1    1  a     4 1 a 4 
2    1  a     6 1 a 6 
3    1  b     5 1 b 5 
4    2  a     8 2 a 8 
5    2  a    10 2 a 10 
6    2  a     9 2 a 9 
7    3  b     3 3 b 3 
8    3  a     4 3 a 4 

Comme vous pouvez le voir, la ligne double « 3 b 3 » a juste été réduite à une observation unique.

+0

Merci pour cela! Mais le fait est que j'ai 200 zones de dénombrement, 47 comtés et une très grande quantité de membres du ménage. Y at-il une fonction ou un code dans R que je peux utiliser qui rassemble tous les codes/variables? En particulier les variables household.members. Dans la base de données, ils vont jusqu'à 156 (3ème quartile) et le maximum est à 814. –

+0

J'ai bien peur de ne pas encore bien comprendre ce que vous demandez. Je remarque dans un commentaire précédent que vous voulez incorporer la province, mais je ne vois pas cela dans votre ensemble de données. Si vous êtes intéressé par l'obtention de la moyenne/médiane de groupes de données, l'utilisation d'un type de fonction agrégée va être le moyen le plus facile de le faire. Je vais modifier mon message pour répondre à votre sortie souhaitée. – ZachTurn

+0

Merci! Cela a plus de sens pour moi. Je vais essayer de le faire de cette façon. –