gpt4 book ai didi

r - 使用 dplyr 过滤最大值之前的所有值

转载 作者:行者123 更新时间:2023-12-01 22:23:44 30 4
gpt4 key购买 nike

我对如何正确执行以下操作感到相当困惑。我知道这可能很简单,但我不太明白。

假设我有一个仪器收集的数据,该仪器在水中升降。作为对数据的补充,深度读数被获取。假设我只对 down 途中的数据感兴趣,并想过滤掉所有向上的数据。更明确地说,我想在depth 的最低值之前 过滤深度读数。一个小问题是,数据通常有几个深度值,在继续下降到最深点之前会略微上升。所以这不是一个纯粹的上升/下降问题。理想情况下使用 dplyr 方法(或适用于 dplyr 的方法),因为我在数据中有组。这是一些虚拟数据:

library(dplyr)

df1 <- data.frame(depth=c(1:6,5,7:10,10.5:1), x=rnorm(21), Group="x")
df2 <- data.frame(depth=c(1:6,5,7:10,10.5:1), x=rnorm(21), Group="y")
df <- rbind(df1, df2)

我总是卡住,因为我很容易就能找到最深的值:

df %>% mutate(depth==max(depth))

我还可以找到(使用@Marc 的回答)一组的深度:

df %>%
filter(Group=="x") %>%
add_rownames() %>%
filter(rowname %in% c(seq(which.max(depth))))

但是,当我尝试添加 group_by 语句时,我仍然只能从第一组中获得所需的结果:

df %>%
add_rownames() %>%
group_by(Group) %>%
filter(rowname %in% c(seq(which.max(depth))))

我没想到 group_by 可以使用过滤器,但我不知道如何在此处不使用过滤器的情况下对行名进行子处理。这里有什么想法吗?

最佳答案

另一种方法

library(dplyr)
df %>% group_by(Group) %>% filter(between(row_number(),1,which.max(depth)))

关于r - 使用 dplyr 过滤最大值之前的所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38311647/

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