将数据帧转换为列表,同时通过键值对进行分组

时间:2015-03-31 21:49:59

标签: r dataframe

假设我有一个非常简单的数据框:

DF <- data.frame(col1=c("a", "a", "b", "b"), col2=c(1, 2, 3, 4))

我怎样才能得到一个如下所示的列表:

$a
[1] 1 2

$b
[1] 3 4

更重要的是,除了ab之外,这对于某些未知数量的群体如何推广?

我首先想到我可以使用dplyr包中的group_by之类的东西,但是如果你要转到那些summarise或类似的东西,它似乎才有用。

我认为最好的想法是使用lapply,但我不确定如何进行分组。

感谢任何建议。

2 个答案:

答案 0 :(得分:3)

另一种选择是使用split

with(DF, split(col2, col1))
# $a
# [1] 1 2
# 
# $b
# [1] 3 4

或者,使用索引(根据@jorans评论)

split(DF[[2]], DF[[1]])

或者

split(DF[, 2], DF[, 1])

答案 1 :(得分:2)

我认为这可以满足您的需求:

as.list(unstack(DF,col2~col1));
## $a
## [1] 1 2
##
## $b
## [1] 3 4