gpt4 book ai didi

r - 用 dplyr "other then"组进行总结

转载 作者:行者123 更新时间:2023-12-04 02:13:15 26 4
gpt4 key购买 nike

我需要在一个分组的 data_frame 中总结(警告:非常感谢使用 dplyr 的解决方案,但不是强制性的)每个组(简单)和“其他”组的相同内容。

最小的例子

if(!require(pacman)) install.packages(pacman)
pacman::p_load(dplyr)

df <- data_frame(
group = c('a', 'a', 'b', 'b', 'c', 'c'),
value = c(1, 2, 3, 4, 5, 6)
)

res <- df %>%
group_by(group) %>%
summarize(
median = median(value)
# median_other = ... ??? ... # I need the median of all "other"
# groups
# median_before = ... ??? ... # I need the median of groups (e.g
# the "before" in alphabetic order,
# but clearly every roule which is
# a "selection function" depending
# on the actual group is fine)
)

我的预期结果如下

group    median    median_other    median_before
a 1.5 4.5 NA
b 3.5 3.5 1.5
c 5.5 2.5 2.5

我在 Google 上搜索了类似于“dplyr summarize excluding groups”、“dplyr summarize other then group”的字符串,我在 dplyr 文档上搜索过,但找不到解决方案。

这里,这个 ( How to summarize value not matching the group using dplyr ) 不适用,因为它只在总和上运行,即是一个“特定于函数”的解决方案(并且具有一个简单的算术函数,不考虑每个组的可变性)。更复杂的函数请求(即均值、sd 或用户函数)呢? :-)

感谢大家

PS:summarize() 是一个例子,同样的问题导致 mutate() 或其他基于组工作的 dplyr 函数。

最佳答案

这是我的解决方案:

res <- df %>%
group_by(group) %>%
summarise(med_group = median(value),
med_other = (median(df$value[df$group != group]))) %>%
mutate(med_before = lag(med_group))

> res
Source: local data frame [3 x 4]

group med_group med_other med_before
(chr) (dbl) (dbl) (dbl)
1 a 1.5 4.5 NA
2 b 3.5 3.5 1.5
3 c 5.5 2.5 3.5

我试图想出一个全 dplyr 解决方案,但基础 R 子集化与 median(df$value[df$group != group]) 返回所有观察值的中位数时效果很好不在当前组中的。

希望本文能帮助您解决问题。

关于r - 用 dplyr "other then"组进行总结,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36450278/

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