首页 > 解决方案 > 根据它们所属的列表的类别按列的每个值分组

问题描述

今天非常具有挑战性,所以我想不出任何新的想法,所以这个问题的解决方案对你来说可能很明显。我有一个非常简单的数据框,如下所示:

structure(list(user_id = c(101, 102, 102, 103, 103, 106, 107, 
111), phone_number = c(4030201, 4030201, 4030202, 4030202, 4030203, 
4030204, 4030205, 4030203), id = 1:8), class = "data.frame", row.names = c(NA, 
-8L))

还有一个列表:

list(c(1, 2, 3, 4, 5, 8), 6, 7)

我想id根据它们属于列表元素的类别对我的数据框列中的每个值进行分组,最好使用purrr包函数。所以想要的输出是这样的:

grp <- c(1, 1, 1, 1, 1, 2, 3, 1)

非常感谢你们,向你们学习/在你们身边学习是我一生的荣幸。

您忠诚的

阿努希拉万

标签: rdplyrpurrr

解决方案


一种选择purrr可能是:

df %>%
    mutate(grp = imap(lst, ~ .y * (id %in% .x)) %>% reduce(`+`))

  user_id phone_number id grp
1     101      4030201  1   1
2     102      4030201  2   1
3     102      4030202  3   1
4     103      4030202  4   1
5     103      4030203  5   1
6     106      4030204  6   2
7     107      4030205  7   3
8     111      4030203  8   1

推荐阅读