gpt4 book ai didi

r - 总结 dplyr 中每组的所有其他值

转载 作者:行者123 更新时间:2023-12-04 11:18:16 24 4
gpt4 key购买 nike

我有一个数据集,其中包含分组做出的个人决定。对于每个人,我需要他/她的小组成员的所有决定的汇总(比方说,总和)。
因此,假设数据如下所示:

set.seed(123)
group_id <- c(sapply(seq(1, 3), rep, times = 3))
person_id <- rep(seq(1,3),3)
decision <- sample(1:10, 9, replace=T)
df <-data.frame(group_id, person_id, decision)
df

结果是:
  group_id person_id decision
1 1 1 3
2 1 2 8
3 1 3 5
4 2 1 9
5 2 2 10
6 2 3 1
7 3 1 6
8 3 2 9
9 3 3 6

我需要制作这样的东西:
  group_id person_id decision others_decision
1 1 1 3 13
2 1 2 8 8
3 1 3 5 11

因此,对于组中的每个元素,我都会让同一组的所有其他成员做一些事情(总和)。我只需一个 for 就可以做到这一点循环,但它看起来丑陋且效率低下。有更好的解决方案吗?

更新:

这是我到目前为止想出的解决方案,抱歉丑陋:
df$other_decision=unlist(by(df, 1:nrow(df), function(row) {
df %>% filter(group_id==row$group_id, person_id!=row$person_id) %>% summarize(sum(decision))
}
))
df

最佳答案

你可以做:

df %>%
inner_join(df, by = c("group_id" = "group_id")) %>%
filter(person_id.x != person_id.y) %>%
group_by(group_id, person_id = person_id.x) %>%
summarise(decision = first(decision.x),
others_decison = sum(decision.y))

group_id person_id decision others_decison
<int> <int> <int> <int>
1 1 1 3 13
2 1 2 8 8
3 1 3 5 11
4 2 1 9 11
5 2 2 10 10
6 2 3 1 19
7 3 1 6 15
8 3 2 9 12
9 3 3 6 15

根据您的实际数据集(其大小),它可能在计算上变得相当苛刻,因为它涉及内部连接。

另一种不涉及内部联接的可能性是:
df %>% 
group_by(group_id) %>%
mutate(others_decison = list(decision),
rowid = 1:n()) %>%
ungroup() %>%
rowwise() %>%
mutate(others_decison = sum(unlist(others_decison)[-rowid])) %>%
ungroup() %>%
select(-rowid)

关于r - 总结 dplyr 中每组的所有其他值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58477099/

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