【问题标题】:R: Subsetting on increasing value to max excluding the decreasingR:增加值到最大值的子集,不包括减少
【发布时间】:2015-07-22 18:50:23
【问题描述】:

我进行了多次试验,其中一个变量增加到感兴趣的最大值,然后又减小到起点。我将如何仅保留观察值并将值增加到最大值。谢谢。

例如

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
    ...

最终,我将获得一个低截止值,并且可能会改变我所说的最大值,但基本上以上是目标。

【问题讨论】:

  • 您可以从可重现的示例和所需的输出插图开始
  • 是的,我应该...但我认为这可能是那些非常简单的例子之一。我会看看编辑。
  • 试试df[c(TRUE,diff(df$C)>=0),]
  • @DavidArenburg,是的,我认为你是对的。
  • @nicola 我想如果第二组的第一个事件小于第一组的最后一个事件的开头,这将不起作用。不确定这在真实数据中是否可行

标签: r subset


【解决方案1】:

可能不是最有效的解决方案,但这里尝试使用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]

【讨论】:

  • 这在您的数据集上工作得非常好,除非您可以使您的示例更具重现性,我无法帮助您。
  • 我的错误...我实际上输入了 **SD​​[1:which.max(df$C]..."。有效。谢谢。
【解决方案2】:
library(dplyr)
df%>%group_by(Trial)%>%slice(1:max(C))

【讨论】:

    猜你喜欢
    • 2018-12-01
    • 2012-05-30
    • 1970-01-01
    • 2021-11-21
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    相关资源
    最近更新 更多