2013-08-19 7 views
0

Je suis sûr qu'il y a des réponses à ma question, mais je n'arrive pas à trouver celle qui fonctionne et je suis absolument nouveau à R, donc excuses pour la redondance!Transposition et fusion de jeux de données dans R

J'ai donc un énorme ensemble de données - 17K obs avec 35 variables. C'était un fichier txt que j'ai importé et contraint avec as.matrix. La 1ère colonne contient des valeurs de caractères et les 34 autres colonnes ont des valeurs numériques.

Structure -

>str(data_m) 
chr [1:17933, 1:35] "RAB12" "TRIM52" "C1orf86" "PLAC9" "MORN3" "LOC643783" "LOC389541" "OAZ2" ... 
- attr(*, "dimnames")=List of 2 
    ..$ : NULL 
    ..$ : chr [1:35] "Name" "X118" "X12" "X21" ... 

Maintenant, il y a un autre petit jeu de données de forme longue avec 2 colonnes - id et le sexe.

> str(data_maleids) 
'data.frame': 24 obs. of 2 variables: 
$ id : Factor w/ 34 levels "X118","X12","X21",..: 8 23 9 19 10 7 5 4 2 30 ... 
$ gender: Factor w/ 2 levels "female","male": 2 2 2 2 2 2 2 2 2 2 ...` 

Par exemple. -

row.names id gender 
1 1   X37 male 
2 2   X64 male 

Tout ce que je veux faire est de sous-ensemble du 1er jeu de données uniquement pour les ids (X37, X64, etc.) qui sont présents dans le 2ème jeu de données.

J'ai essayé de transposer le plus grand ensemble de données, mais cela me pose des problèmes en termes de noms de colonnes et je n'arrive pas à contourner ce problème.

+2

Lorsque vous lisez votre première image, ne la contractez pas dans une matrice. Lorsque vous lisez dans votre deuxième dataframe (avec juste id et genre), réglez 'stringsAsFactors = FALSE'. Ensuite, faites juste 'df1 [df1 $ Name% dans% df2 $ id,]'. – Thomas

+0

Il devrait être colnames (df1) plutôt que $ Name droit? Parce que l'id de df2 est en fait le nom de la colonne dans df1. Mais la logique a fonctionné. Merci ! Cependant, cela mène à une autre étape de fusionner la 1ère colonne $ Name de l'ensemble de données original qui fonctionne de nouveau mais n'est pas la meilleure façon de le faire, je suppose. Il devrait y avoir un moyen de conserver la colonne intitulée Nom en sous-ensembles – user2695213

Répondre

2

Le premier commentaire concerne votre instruction "La 1ère colonne a des valeurs de caractères et les 34 autres colonnes ont des valeurs numériques". data_m est une matrice, donc toutes les colonnes sont du même type. Dans ce cas, le caractère. Vous pouvez le voir à partir de la sortie du str(). Pensez à une matrice dans R comme un vecteur qui est organisé en plusieurs colonnes.

Deuxièmement, je vous conseille d'utiliser le paquet data.table (vous devez l'installer si vous ne l'avez pas encore) pour cette tâche. Le croquis de la syntaxe serait quelque chose comme ceci:.

  1. Lire les données Il y a une belle fonction fread() dans le package data.table pour lire les données à partir de fichiers texte comme un objet data.table : data_m <- fread("file.name.txt")
  2. Key la data_m par la variable id: setkey(data_m, id)
  3. Faire un vecteur de ids de la data_maleids: ids <- sort(unique(data_maleids$id)). Choisissez le cas dont vous avez besoin: data_m[id %in% ids].
+1

Salut .. J'ai essayé d'installer le paquet data.table mais R ne semble pas trouver la fonction fread (v 3.0.1) "Erreur: impossible de trouver la fonction" fread " – user2695213

+2

Vous devez charger le paquet pour le rendre disponible pendant une session avec 'require (data.table)'. – djhurio

Questions connexes