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

R 将数据帧转换为列表,同时通过键值对进行分组,r,dataframe,R,Dataframe,假设我有一个非常简单的数据帧: DF <- data.frame(col1=c("a", "a", "b", "b"), col2=c(1, 2, 3, 4)) 更重要的是,除了a和b之外,这是如何推广到一些未知数量的组的 我最初认为我可以使用dplyr包中的groupby之类的东西,但它似乎只有在您要对进行总结时才有用 我认为最好的办法是使用lappy,但我不确定如何进行分组 非常感谢您的建议。我想这正是您想要的: as.list(unstack(DF,col2~col1)); ##

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

DF <- data.frame(col1=c("a", "a", "b", "b"), col2=c(1, 2, 3, 4))
更重要的是,除了
a
b
之外,这是如何推广到一些未知数量的组的

我最初认为我可以使用dplyr包中的
groupby
之类的东西,但它似乎只有在您要对
进行总结时才有用

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


非常感谢您的建议。

我想这正是您想要的:

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

另一个选项是使用
split

with(DF, split(col2, col1))
# $a
# [1] 1 2
# 
# $b
# [1] 3 4
或者,使用索引(根据@jorans注释)


我可以按索引而不是名称引用列吗?
as.list(取消堆栈(DF,DF[[2]]~DF[[1]])…以及按索引而不是名称请求的版本:
split(DF[[2]],DF[[1]])
。您到底为什么需要这样做?如果你告诉我们更多关于你的背景,这很可能是可以避免的。
with(DF, split(col2, col1))
# $a
# [1] 1 2
# 
# $b
# [1] 3 4
split(DF[[2]], DF[[1]])
split(DF[, 2], DF[, 1])