我有一个以下类型的数据框:
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
将数据框附加到单个数据框中。
我的问题是:如何使用矢量化函数进行此操作?
我尝试了apply
,sapply
,mapply
和Reduce
,但没有成功。 apply
是唯一实际执行但产生不正确结果的(仅获得每个列表的第一个元素)。
答案 0 :(得分:2)
我们可以移除第一列(df[-1]
),循环其他列unlist
,然后将list
转换为data.frame
lst <- lapply(df[-1], unlist)
dfN <- data.frame(lst)