获得连续高值data.frame列的有效方法

时间:2014-11-20 22:26:16

标签: r dataframe rowfilter

假设我在R

中有以下data.frame
df <- data.frame(order=(1:10),value=c(1,7,3,5,9,2,9,10,2,3))

除了循环数据之外,测试值是否超过先前的高值我如何获得连续的高值,以便我最终得到这样的表

order   value
 1        1
 2        7
 5        9
 8       10

TIA

2 个答案:

答案 0 :(得分:1)

如果我理解正确的问题,这是一个选项:

df[df$value > cummax(c(-Inf, head(df$value, -1))),]
#  order value
#1     1     1
#2     2     7
#5     5     9
#8     8    10

我使用cummax来跟踪列的最大值&#34;值&#34;并将它(前一行&#39; cummax)与每个&#34;值&#34;进行比较。条目。为了确保第一个条目也被选中,我从&#34; -Inf&#34;。

开始

答案 1 :(得分:0)

“获取连续的高值(值?)” 不清楚。 您似乎只想过滤其值高于之前最大值的行

首先,我们按照递增的价值顺序重新排序你的df ...(不清楚,但我认为这就是你想要的)

然后我们使用diff()>0的逻辑索引来仅包含严格增加的行:

rdf <- df[order(df$value),]

rdf[ diff(rdf$value)>0, ]
   order value
1      1     1
9      9     2
10    10     3
4      4     5
2      2     7
7      7     9
8      8    10