【发布时间】:2015-09-20 15:40:25
【问题描述】:
我有以下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)
altNames 列可以是空的(即字符(0)),只有一个名称,或一个名称列表。我想要的是一个data.frame(或一个列表),其中来自name 和/或altNames 的每个条目与相应的id 一起出现一次,如下所示:
id name
1001 Joan
1002 Jane
1002 Janie
1002 Janet
1002 Jan
1003 John
1003 Jon
1004 Bill
1004 Will
1005 Tom
最有效的方法是什么?更好的是使用dplyr。
谢谢
编辑:这是数据:
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))
)
【问题讨论】:
-
这是
tidyr::unnest的工作,但目前在这个例子中被破坏了:github.com/hadley/tidyr/issues/91 -
我在使用您的 dput 时遇到错误,因此我将其更改为 @hadley 的示例。顺便说一下
do.call('rbind', lapply(1:nrow(df), function(x) data.frame(id = df[x, 1], name = unlist(df[x, -1]), row.names = NULL))),这是 base r 中的另一种方式
标签: r dataframe dplyr data.table