gpt4 book ai didi

检索给定大小 k 的 n 项的所有可能组合,并在另一列上应用函数 sum

转载 作者:行者123 更新时间:2023-12-01 22:04:43 25 4
gpt4 key购买 nike

我有一个 df 看起来像:

  item value
1 a 1
2 b 4
3 c 3
4 d 2
5 e 6
6 f 8
7 g 11

df <- data.frame(stringsAsFactors=FALSE,
item = c("a", "b", "c", "d", "e", "f", "g"),
value = c(1L, 4L, 3L, 2L, 6L, 8L, 11L))

我想生成 size = 3 项目的所有可能组合,例如:

size <- 3

combo_3 <- combn(df$item, size, simplify = F)

现在我想总结一下这个结果。

我想要一个数据框包含:

  • 组合索引
  • 组合中的项目
  • 该特定组合的列值的总和

这里是第一个组合出现的示例数据框:

combo_index    item    sum_total
1 a 8
1 b 8
1 c 8
2 a 7
2 b 7
2 d 7
3 a 11
3 b 11
3 e 11
...
...
...

最佳答案

这可以通过遍历 list 来实现,根据与 'df' 中的 'item' 匹配得到相应的 'value',创建一个 data.framerbind list 元素

library(data.table)
rbindlist(lapply(combo_3, function(x) data.frame(item = x,
sum_total = sum(setNames(df$value, df$item)[x])) ),
idcol = 'combo_index')
# combo_index item sum_total
# 1: 1 a 8
# 2: 1 b 8
# 3: 1 c 8
# 4: 2 a 7
# 5: 2 b 7
# ---
#101: 34 f 21
#102: 34 g 21
#103: 35 e 25
#104: 35 f 25
#105: 35 g 25

或者更好的做法是将 stack list 成两列 data.frameleft_join原始数据集,按'ind'分组得到'value'的sum

library(tidyverse)
setNames(combo_3, seq_along(combo_3)) %>%
stack %>%
left_join(df, by = c("values" = "item")) %>%
group_by(ind) %>%
mutate(value = sum(value)) %>%
ungroup %>%
select(combo_index = ind, item = values, sum_total = value)
# A tibble: 105 x 3
# combo_index item sum_total
# <fct> <chr> <int>
# 1 1 a 8
# 2 1 b 8
# 3 1 c 8
# 4 2 a 7
# 5 2 b 7
# 6 2 d 7
# 7 3 a 11
# 8 3 b 11
# 9 3 e 11
#10 4 a 13
# ... with 95 more rows

关于检索给定大小 k 的 n 项的所有可能组合,并在另一列上应用函数 sum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52523809/

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