2017-10-19 5 views
-1

Il est un problème quereller données, problème avec une requête. J'ai un ensemble de données, et chaque ligne ne représente pas 1 échantillon mais contient une colonne qui a une liste d'ID. Par exemple, vous avez 3 colonnes: âge, sexe & ID. Vous pourriez avoir une rangée: 28, M, 'ID209,ID208'.L'extension d'un ensemble de données basé sur plusieurs ID dans une colonne

Y at-il des moyens faciles d'étendre cet ensemble de données telles que j'ai une ligne par numéro d'identification? Je travaille avec R ou Python.

+2

Oui, vous devrez fournir un échantillon des données pour nous d'aider bien. Si vous utilisez R, voir [ici pour créer un exemple reproductible] (https://stackoverflow.com/a/5963610/4421870) – Mako212

+0

R solution: 'library (tidyverse); df%>% muter (id = stringr :: str_split (id, « »))%>% unnest (id) ' – brittenb

+0

merci, unnest était vraiment la fonction que je cherchais! – user3343378

Répondre

1

Cela peut ne pas être la solution la plus propre de Python, mais il devrait vous aider à démarrer.

Cela suppose que vous avez divisé les lignes en une liste de ce formulaire: [age, sex, 'ids']. Ce code devrait être facile à modifier pour s'adapter à votre format de ligne réel, mais cela devrait être suffisant pour vous aider à démarrer.

new_rows = [] 
for row in dataset: 
    id1, id2 = row[2].split(',') 
    new_rows.append([row[0], row[1], id1]) 
    new_rows.append([row[0], row[1], id2]) 

print(new_rows) 

J'espère que cela aide.

1

Une solution utilisant R tidytext. Si l'on suppose que les valeurs dans la colonne ids sont séparés par des virgules:

library(tidytext) 
library(stringr) 

df1 <- data.frame(age = 28, 
        sex = "M", 
        ids = "ID209,ID208", 
        stringsAsFactors = FALSE) 

df1 %>% 
    unnest_tokens(id, ids, token = str_split, pattern = ",", to_lower = FALSE) 

    age sex id 
1 28 M ID209 
1.1 28 M ID208