使用每列列表将数据框扩展/展开为一行

时间:2016-01-22 11:14:56

标签: r dataframe

我有一个以下类型的数据框:

df <- data.frame("col1" = c(1,2,3,4))
df$col2 <- list(list(1,1,1),list(2,2,2),list(3,3,3),list(4,4,4))
df$col3 <- list(c(1,1,1),c(2,2,2),c(3,3,3),c(4,4,4))

df

得到:

 col1    col2    col3
1    1 1, 1, 1 1, 1, 1
2    2 2, 2, 2 2, 2, 2
3    3 3, 3, 3 3, 3, 3
4    4 4, 4, 4 4, 4, 4

现在我想操纵这个数据框来得到类似的东西:

 col1    col3
1    1    1
     1    1
     1    1 
2    2    2
     2    2
     2    2 
3    3    3
     3    3
     3    3
...

现在我可以用一个简单的循环来做到这一点。对于每一行,我将列表转换为数据帧。然后我使用rbind将数据框附加到单个数据框中。

我的问题是:如何使用矢量化函数进行此操作?

我尝试了applysapplymapplyReduce,但没有成功。 apply是唯一实际执行但产生不正确结果的(仅获得每个列表的第一个元素)。

1 个答案:

答案 0 :(得分:2)

我们可以移除第一列(df[-1]),循环其他列unlist,然后将list转换为data.frame

lst <- lapply(df[-1], unlist)
dfN <- data.frame(lst)