我有以下框架:
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
的解决方案,但我正在寻找更简单的方法。
非常感谢所有帮助!
答案 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)))