r - 从一列中提取另一列中的每个组的列表

标签 r list aggregation reshape2

我有一个长格式的数据框,其中有两个因子变量作为列,第一列代表一系列唯一的类,第二列代表分组变量(在本例中为类(class)发生的城市)。

class <- c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K")
city <- c("Atlanta", "Atlanta", "Atlanta", "Detroit", "Detroit", "Milwaukee", "Milwaukee", "Milwaukee", "Milwaukee", "Portland", "Juneau")
samp <- data.frame(class, city)

samp
# class     city
#   A     Atlanta
#   B     Atlanta
#   C     Atlanta
#   D     Detroit
#   E     Detroit
#   F     Milwaukee
#   G     Milwaukee
#   H     Milwaukee
#   I     Milwaukee
#   J     Portland
#   K     Juneau

对于每个城市,我想要一份在那里举办的所有类(class)的列表。理想情况下,输出如下所示:

class.list <- list(Atlanta = c("A", "B", "C"), Detroit = c("D", "E"), Milwaukee = c("F", "G", "H", "I"), Portland = "J", Juneau = "K")

class.list
# $Atlanta
# [1] "A" "B" "C"
#
# $Detroit
# [1] "D" "E"
#
# $Milwaukee
# [1] "F" "G" "H" "I"
#
# $Portland
# [1] "J"
#
# $Juneau
# [1] "K"

我尝试过各种解决方案,但都失败了。可以说,我最接近的是通过 dcast,但这并不是我想要的输出:

library(reshape2)
class.list <-dcast(samp, city ~ class)

class.list
# place       A         B         C        D        E         F    ...
# Atlanta  Atlanta   Atlanta   Atlanta    <NA>     <NA>      <NA>  ...
# Detroit    <NA>       <NA>      <NA>   Detroit   Detroit   <NA>  ...
# ...

最佳答案

我们可以使用split

split(as.character(samp$class), samp$city)
#$Atlanta
#[1] "A" "B" "C"

#$Detroit
#[1] "D" "E"

#$Juneau
#[1] "K"

#$Milwaukee
#[1] "F" "G" "H" "I"

#$Portland
#[1] "J"

或者另一个选项是unstack

unstack(samp, class~city)

关于r - 从一列中提取另一列中的每个组的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35273433/

相关文章:

R:预测组的新值

r - 缩放geom_密度以将geom_bar与y上的百分比相匹配

python - 我想知道为什么这行得通

Elasticsearch 嵌套基数聚合

logging - 是否有一种工具可以轻松地以聚合方式从 AWS Elastic Beanstalk 搜索 S3 中每小时轮换的日志?

r - 我可以使用R属性来保存物理单位吗?

R 在 citation() 输出中缺少围兜键

java - 比较每个列表中每个索引的项目

python - 如何从多维列表的第二个列表中找到 numpy.amax ?

mysql - MySQL 服务器上非常简单的 AVG() 聚合查询需要很长时间