我有一个如下所示的数据框:
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/