【发布时间】:2016-07-12 02:22:28
【问题描述】:
我对如何正确执行以下操作感到相当困惑。我知道这可能很简单,但我无法弄清楚。
假设我有一个仪器收集的数据,该仪器在水中升高和降低。作为数据的补充,进行深度读数。假设我只对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 可以使用过滤器,但我不知道如何在不使用过滤器的情况下子为行名。这里有什么想法吗?
【问题讨论】:
-
@Psidom - 正如我上面所说,严格来说,这不是我需要匹配的升序/降序模式。
-
@Marc 的回答能满足你的需要吗?
-
@Psidom 不完全是。我还没有完全弄清楚如何在类似
dplyr的方法中应用它。 -
一定要使用
dplyr吗?马克的回答哪一部分不正确? -
我尽量让我的例子简单,但我的实际应用是按组做事情练习。因此,在一个因子指定的组中找到高于最低点的所有值。所以马克的回答并不完全不正确。我只是不知道如何在
dplyr中应用行号方法,以便可以使用group_by