gpt4 book ai didi

r - 获取由累积列值加权的 data.frame 的顶行

转载 作者:行者123 更新时间:2023-12-04 01:03:26 27 4
gpt4 key购买 nike

假设我们有一个包含数字列的 date.frame。现在我只想过滤那些占数字列前 75% 的行。

这是一个例子和一个笨拙的解决方案:

library(tidyverse)

d <- tribble(
~name, ~value,
"A", 40,
"B", 20,
"C", 10,
"D", 10,
"E", 5,
"F", 5,
"G", 3,
"H", 3,
"I", 3,
"J", 1,
)

d %>%
arrange(desc(value)) %>%
mutate(
relative_value = value / sum(value),
cum_relative_value = cumsum(relative_value)
) %>%
filter(lag(cum_relative_value) <= 0.75 | is.na(lag(cum_relative_value)))
#> # A tibble: 4 x 4
#> name value relative_value cum_relative_value
#> <chr> <dbl> <dbl> <dbl>
#> 1 A 40 0.4 0.4
#> 2 B 20 0.2 0.6
#> 3 C 10 0.1 0.7
#> 4 D 10 0.1 0.8

reprex package 创建于 2021-04-30 (v1.0.0)

如您所见,我计算了累积值的百分比并根据该值进行过滤。我必须使用 lag() 获取超过 0.75 界限的行,并使用 is.na() 获取第一行。

这真的感觉很笨拙。我认为应该有 slice_*fct_lump_prop() 的解决方案,但我想不通。

那么有什么好的“dplyr”方式吗?

最佳答案

这个呢?

d %>%
arrange(-value) %>%
filter(
lag(cumsum(prop.table(value)), default = 0) <= 0.75
)

给出

# A tibble: 4 x 2
name value
<chr> <dbl>
1 A 40
2 B 20
3 C 10
4 D 10

关于r - 获取由累积列值加权的 data.frame 的顶行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67330584/

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