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

博舍克

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

假设我有一个通过上升和下降到水里的仪器收集的数据。除数据外,还可以读取深度。假设我只对下行数据感兴趣,并想从上行数据中过滤掉所有数据。更明确地说,我想的最低值之前过滤深度读数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要使用过滤器,但是我不知道如何在不使用过滤器的情况下为行名求子。这里有什么想法吗?

智慧

似乎并没有想出dplyr解决问题的方法,但是data.table替代方法是可行的:

library(data.table)
setDT(df)[, head(.SD, which.max(depth)), by = Group]  
# say the factor is some grouping variable you are trying to apply

    Group depth           x
 1:     x   1.0 -0.22907469
 2:     x   2.0  0.15284187
 3:     x   3.0  1.99289070
 4:     x   4.0 -0.80802497
 5:     x   5.0  0.41455226
 6:     x   6.0  0.39673474
 7:     x   5.0 -0.35179347
 8:     x   7.0 -0.18892176
 9:     x   8.0  2.97448709
10:     x   9.0 -0.14464747
11:     x  10.0  0.99434061
12:     x  10.5 -0.64831649
13:     y   1.0  1.10262757
14:     y   2.0 -0.64630288
15:     y   3.0  0.43909555
16:     y   4.0 -0.00575027
17:     y   5.0 -0.81374528
18:     y   6.0 -0.45948930
19:     y   5.0  0.03333462
20:     y   7.0  0.31111807
21:     y   8.0  1.64502251
22:     y   9.0  0.97451275
23:     y  10.0  1.12403518
24:     y  10.5  1.21710311
    Group depth           x

坚持下去dplyr,您可以创建一个新id变量来分别标记每个组的行,然后根据以下条件进行过滤which.max

df %>% group_by(Group) %>% mutate(id = seq_len(n())) %>% filter(id <= which.max(depth))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用groupby的数据框中的所有最大值

来自分类Dev

SQL:使用最大值过滤行

来自分类Dev

返回所有组的最大值?

来自分类Dev

如何在r中具有最佳响应的变量之前和最大值处过滤观测值?

来自分类Dev

使用if语句过滤最小值/最大值R

来自分类Dev

过滤在JavaScript中具有最大值的数组项

来自分类Dev

使用R查找最大值之前的行

来自分类Dev

在pyspark中使用groupby基于过滤的行创建具有最大值的新列

来自分类Dev

使用mongodb中的聚合获取所有具有最大值的文档

来自分类Dev

使用mongodb中的聚合获取所有具有最大值的文档

来自分类Dev

使用流过滤基于条件的最大值列表

来自分类Dev

快速找到C ++中的所有局部最大值

来自分类Dev

获取R向量中的所有最大值索引

来自分类Dev

在Pandas DataFrame中找到所有最大值的索引

来自分类Dev

matplotlib argrelmax找不到所有最大值

来自分类Dev

查找函数的所有局部最大值

来自分类Dev

如何获得向量中所有分量的最大值?

来自分类Dev

在Pandas DataFrame中找到所有最大值的索引

来自分类Dev

优化算法以查找所有局部最大值

来自分类Dev

选择所有最大值SQL查询

来自分类Dev

如何获取每组最大值的所有记录

来自分类Dev

如何编译使用流的给定属性的最大值的所有对象的列表?

来自分类Dev

如何使用SQL选择列中共享最大值的所有行

来自分类Dev

查找局部最大值之前的正值

来自分类Dev

numpy:将矩阵的所有值设置为每行最大值的右侧到该行的最大值

来自分类Dev

R dplyr历史最大值

来自分类Dev

R(dplyr)中的条件最大值?

来自分类Dev

Scala根据最大值过滤列表

来自分类Dev

过滤给定ID的最大值的行

Related 相关文章

热门标签

归档