gpt4 book ai didi

r - 使用 dplyr 聚合不在组中的值

转载 作者:行者123 更新时间:2023-12-01 13:17:22 26 4
gpt4 key购买 nike

考虑一个数据框,它捕获与给定集群/特征对关联的值:

library(tidyverse)

set.seed(100)
X <- data_frame(Cluster = rep(1L:3L,2),
Feature = rep(c("A","B"), each=3),
Values = map(rep(11:13,2), rnorm) )
# # A tibble: 6 x 4
# Cluster Feature Values
# <int> <chr> <list>
# 1 1 A <dbl [11]>
# 2 2 A <dbl [12]>
# 3 3 A <dbl [13]>
# 4 1 B <dbl [11]>
# 5 2 B <dbl [12]>
# 6 3 B <dbl [13]>

我有兴趣创建一个新列,对于任何给定的集群/特征对,合并其他集群中该特征的所有值。例如,此类不在集群 (NIC) 列中的第一个条目应包含与集群 2 和 3 中的特征 A 关联的 25 个值。

以下对行的循环将产生正确的答案:

X$NIC <- map( 1:nrow(X), ~c() )
for(i in 1:nrow(X) ) {
cl <- X$Cluster[i]
f <- X$Feature[i]
X$NIC[[i]] <- filter( X, Cluster != cl, Feature == f ) %>%
pull(Values) %>% unlist
}
# # A tibble: 6 x 4
# Cluster Feature Values NIC
# <int> <chr> <list> <list>
# 1 1 A <dbl [11]> <dbl [25]>
# 2 2 A <dbl [12]> <dbl [24]>
# 3 3 A <dbl [13]> <dbl [23]>
# 4 1 B <dbl [11]> <dbl [25]>
# 5 2 B <dbl [12]> <dbl [24]>
# 6 3 B <dbl [13]> <dbl [23]>

## Spot-checking
with( X, identical(NIC[[1]], unlist(Values[2:3])) ) # TRUE
with( X, identical(NIC[[5]], unlist(Values[c(4,6)])) ) # TRUE

我想知道使用 dplyr 工具是否有更简洁的方法。我觉得这是 group_by 解决方案的完美设置,但似乎需要在组之间进行一些“串扰”才能使其正常工作。

最佳答案

关键是Cluster 分组,因为您想要迭代功能内的集群。

library(dplyr)
library(purrr)

mutate(group_by(X, Feature),
NIC = map(1:n(), ~ flatten_dbl(Values[-.])))
# # A tibble: 6 x 4
# # Groups: Feature [2]
# Cluster Feature Values NIC
# <int> <chr> <list> <list>
# 1 1 A <dbl [11]> <dbl [25]>
# 2 2 A <dbl [12]> <dbl [24]>
# 3 3 A <dbl [13]> <dbl [23]>
# 4 1 B <dbl [11]> <dbl [25]>
# 5 2 B <dbl [12]> <dbl [24]>
# 6 3 B <dbl [13]> <dbl [23]>

关于r - 使用 dplyr 聚合不在组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53505664/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com