R:将值增加到最大值的子集除去减少

时间:2015-07-22 18:50:23

标签: r subset

我有许多试验,其中一个变量增加到最大值,然后减少回到起点。如何保持观察值的增加值达到最大值。感谢。

例如

Trial A B C
    1 2 4 1
    1 4 3 2
    1 3 7 3
    1 3 3 2
    1 4 1 1
    2 4 1 1
    2 6 2 2
    2 3 1 3
    2 1 1 2
    2 7 3 1
    ...

因此,我们将检查C上的最大值并保留如下,

Trial A B C
    1 2 4 1
    1 4 3 2
    1 3 7 3
    2 4 1 1
    2 6 2 2
    2 3 1 3
    ...

最终我会有一个低截止值,也可能是我所说的最大值,但基本上就是上述目标。

2 个答案:

答案 0 :(得分:3)

可能不是最有效的解决方案,但这是尝试使用data.table

library(data.table)
setDT(df)[, .SD[1:which.max(C)], by = Trial]
#    Trial A B C
# 1:     1 2 4 1
# 2:     1 4 3 2
# 3:     1 3 7 3
# 4:     2 4 1 1
# 5:     2 6 2 2
# 6:     2 3 1 3

或者提高效率

indx <- setDT(df)[, .I[1:which.max(C)], by = Trial]
df[indx$V1]

答案 1 :(得分:-1)

library(dplyr)
df%>%group_by(Trial)%>%slice(1:max(C))