r - 构建组中所有值的列表并应用于整个组

我有一个如下所示的数据框:

x <- tibble(id = c(1,1,1,2,2,2),
            val = c(1,3,5,7,9,11)
            )

我想group_by每个id,然后将每个组中所有val的列表/向量应用到每个成员那个小组。结果将是如下所示的数据框。

x_out <- tibble(id = c(1,1,1,2,2,2),
                    val = c(1,3,5,7,9,11),
                    group_vals = list(c(1,3,5),c(1,3,5),c(1,3,5),
                                c(7,9,11),c(7,9,11),c(7,9,11))
               )

我该怎么做,因为像 summarize 这样的函数只为整个组返回一个值?

最佳答案

out <- x %>%
  group_by(id) %>%
  mutate(group_vals = list(val)) %>%
  ungroup()
out
# # A tibble: 6 x 3
#      id   val group_vals
#   <dbl> <dbl> <list>    
# 1     1     1 <dbl [3]> 
# 2     1     3 <dbl [3]> 
# 3     1     5 <dbl [3]> 
# 4     2     7 <dbl [3]> 
# 5     2     9 <dbl [3]> 
# 6     2    11 <dbl [3]> 

我们可以看到 group_vals 的样子:

str(out)
# tibble [6 x 3] (S3: tbl_df/tbl/data.frame)
#  $ id        : num [1:6] 1 1 1 2 2 2
#  $ val       : num [1:6] 1 3 5 7 9 11
#  $ group_vals:List of 6
#   ..$ : num [1:3] 1 3 5
#   ..$ : num [1:3] 1 3 5
#   ..$ : num [1:3] 1 3 5
#   ..$ : num [1:3] 7 9 11
#   ..$ : num [1:3] 7 9 11
#   ..$ : num [1:3] 7 9 11

验证,使用上面的 x_out 定义:

identical(out, tibble(id = c(1,1,1,2,2,2),
                    val = c(1,3,5,7,9,11),
                    group_vals = list(c(1,3,5),c(1,3,5),c(1,3,5),
                                c(7,9,11),c(7,9,11),c(7,9,11))
               ))
# [1] TRUE

https://stackoverflow.com/questions/70441275/

相关文章:

regex - 只查找多行 C 注释,不查找单行 C 注释

android - 在 Jetpack Compose 中调用分页数据的刷新方法无法正常工作

r - 计算数据框中给定变量的均值和标准差

nuget - nuget 的 GitHub Packages 服务身份验证问题

python - 压缩文件 : Check for correct Password

javascript - 如何在项目的特定子目录上运行 prettier?

typescript - TypeScript 中的泛型类型参数 T 是什么?

google-cloud-platform - 关于 Google Cloud Pub/Sub 消息

go - Golang 中的全局变量

reactjs - 为什么 npm uninstall -g create-react-app 失败