R:子集增加值到最大值不包括减少
R: Subsetting on increasing value to max excluding the decreasing
我有很多试验,其中一个变量增加到最大兴趣然后减少回到起点。我将如何只保留增加值到最大值的观察结果。谢谢
例如
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
...
最终我会有一个低截止值以及可能会改变我所说的最大值但基本上以上是目标。
可能不是最有效的解决方案,但这是使用 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]
library(dplyr)
df%>%group_by(Trial)%>%slice(1:max(C))
我有很多试验,其中一个变量增加到最大兴趣然后减少回到起点。我将如何只保留增加值到最大值的观察结果。谢谢
例如
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
...
最终我会有一个低截止值以及可能会改变我所说的最大值但基本上以上是目标。
可能不是最有效的解决方案,但这是使用 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]
library(dplyr)
df%>%group_by(Trial)%>%slice(1:max(C))