Ho il seguente data.frame
:disimballaggio e fondendo gli elenchi in una colonna in data.frame
id name altNames
1001 Joan character(0)
1002 Jane c("Janie", "Janet", "Jan")
1003 John Jon
1004 Bill Will
1005 Tom character(0)
La colonna altNames
potrebbe essere vuota (cioè caratteri (0)), hanno un solo nome, o un elenco di nomi. Quello che voglio è una data.frame
(o una lista) in cui appare ogni voce da name
e/o altNames
solo una volta insieme con il corrispondente id
, in questo modo:
id name
1001 Joan
1002 Jane
1002 Janie
1002 Janet
1002 Jan
1003 John
1003 Jon
1004 Bill
1004 Will
1005 Tom
Qual è il modo più efficiente di farlo? Ancora meglio è dplyr
viene utilizzato. Grazie
Edit: Ecco i dati:
df <- data_frame(
id = c("1001", "1002","1003", "1004", "1005"),
name = c("Joan", "Jane", "John", "Bill", "Tom"),
altNames = list(character(0), c("Janie", "Janet", "Jan"), "Jon", "Will", character(0))
)
Questo è il lavoro di 'tidyr :: unnest', ma è attualmente rotto per questo esempio: https://github.com/hadley/tidyr/issues/91 – hadley
Ottengo errori utilizzando il tuo dput, quindi l'ho cambiato per l'esempio di @ hadley. ecco un altro modo in base r tra l'altro 'do.call ('rbind', lapply (1: nrow (df), function (x) data.frame (id = df [x, 1], name = unlist (df [x, -1]), row.names = NULL))) ' – rawr