gpt4 book ai didi

r - 将 dplyr 与过滤器、group_by 和尾部一起使用?

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

这是一个示例 df:

df <- structure(list(x = 1:30, y = 101:130, g = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("A", "B", "C"), class = "factor")), .Names = c("x", "y", "g"), row.names = c(NA, -30L), class = "data.frame")

我想为过滤数据中的每个组获得 y 的 10 个最低值。


df2 <- df %>% filter(x>3) %>% group_by(g) %>%  tail(y, n=10)

只返回最后一组的行(在本例中为 C):
Source: local data frame [10 x 3]
Groups: g

x y g
18 21 121 C
19 22 122 C
20 23 123 C
21 24 124 C
22 25 125 C
23 26 126 C
24 27 127 C
25 28 128 C
26 29 129 C
27 30 130 C

我究竟做错了什么?

最佳答案

您可以使用 taildo .

df2 <- df %>% filter(x>3) %>% group_by(g) %>%  do(tail(., n=10))
.的使用是这个工作的关键。来自 do帮助页面:“您可以使用 . 来引用当前组。”

编辑:

正如@beginneR 指出的那样,我专注于如何使用 taildplyr 成群结队并错过了 OP 要求 y 的 10 个最低值的问题部分.要正确执行此操作需要添加 arrange .与 tail ,这意味着按 y 的降序排列.
df2 <- df %>% filter(x>3) %>% group_by(g) %>%  arrange(desc(y)) %>% do(tail(., n=10))

关于r - 将 dplyr 与过滤器、group_by 和尾部一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24512873/

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