首页 > 解决方案 > 如何从 R 中的数据框中列出共享共同值的键?

问题描述

我有一个包含两列的大型数据框(3M 行):keyvalue,并且我想创建一个向量列表(或任何类似的数据结构),其中元素的数量与不同的数量一样多value,这样列表的元素 k 是key其向量value为 k。

# original dataframe:
df
# key   value
#   4       a
#   2       a
#   3       k
#  12       a

# expected output:
list
# $`a`
# [1] 4 2 12
#
# $`k`
# [1] 3

我尝试了一个循环,但它非常慢(处理 1M 行需要 6 个小时,我把它停在那里)。有没有更有效的方法?

标签: rlistloopsdataframe

解决方案


这由 dplyrgroup_rowsgroup_data分组数据的方法处理:

library(dplyr)

grp_df <- group_by(mtcars, gear)
group_rows(grp_df)

#[[1]]
# [1]  4  5  6  7 12 13 14 15 16 17 21 22 23 24 25
#
#[[2]]
# [1]  1  2  3  8  9 10 11 18 19 20 26 32
#
#[[3]]
#[1] 27 28 29 30 31

group_data(grp_df)

## A tibble: 3 x 2
#   gear .rows
#  <dbl> <list>
#1     3 <int [15]>
#2     4 <int [12]>
#3     5 <int [5]>

推荐阅读