用列表扩展行作为观察

时间:2018-11-08 11:58:43

标签: r

我有以下框架:

df <- structure(list(returns = list(c(1,2,3,4,5,6), c(7,8,9,10,11,12)), indexId = c("a", "b")), class = "data.frame", row.names = 1:2)

是否有一种简单的方法可以将其转换为普通的data.frame,因此显示为:

Choice ppl
   1   a
   2   a
   3   a
   4   a
   5   a
   6   a
   7   b
   8   b
   9   b
  10   b
  11   b
  12   b

我有一个使用For的解决方案,但我正在寻找更简单的方法。

非常感谢所有帮助!

2 个答案:

答案 0 :(得分:3)

df <- structure(list(returns = list(c(1,2,3,4,5,6), c(7,8,9,10,11,12)), 
                     indexId = c("a", "b")), class = "data.frame", row.names = 1:2)

library(tidyverse)

df %>% separate_rows()

#    returns indexId
# 1        1       a
# 2        2       a
# 3        3       a
# 4        4       a
# 5        5       a
# 6        6       a
# 7        7       b
# 8        8       b
# 9        9       b
# 10      10       b
# 11      11       b
# 12      12       b

答案 1 :(得分:3)

或:

data.frame(choice = unlist(df$returns), ppl = rep(df$indexId, lapply(df$returns, length)))