【发布时间】:2019-02-28 10:59:40
【问题描述】:
情况:我有一个由不同记录器收集的数据集列表,如下所示:
df <- structure(list(ID = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L), .Label = "logger1", class = "factor"), OriginalTraitValue = c(0.37968,
0.455131, 0.606376, 0.910194, 1.19499, 1.55612, 1.91735, 2.35493,
2.60147, 2.42803, 1.66277, 1.12656, 0.628537), Temp = c(11.7334,
14.627, 19.3428, 24.5959, 29.6344, 34.7809, 39.606, 44.5389,
49.7914, 54.8254, 59.6391, 64.6695, 69.7002)), class = "data.frame", row.names = c(NA,
-13L))
任务:我只想保留在max(OriginalTraitValue) 之前和之后至少记录两个Temp 值的数据集。
我希望这个情节更清楚。红色 = 最大值,绿色 = 保留数据集所需的值。
问题
如何在 R 中执行此操作,例如使用dplyr?
我已经设法使用df$Temp[df$OriginalTraitValue == max(df$OriginalTraitValue)] 识别出与max(OriginalTraitValue) 对应的Temp 值,但我正在努力使用必要的位置参数来过滤数据集。
编辑
上面的例子代表了一个我想保留的数据集。完整的数据集如下所示:
df <- structure(list(ID = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L), .Label = c("logger1", "logger2", "logger3"
), class = "factor"), OriginalTraitValue = c(3.36e-11, 3.68e-11,
5.12e-11, 6.24e-11, 6.72e-11, 8.64e-11, 1.04e-10, 1.1e-10, 1.18e-10,
90.34189, 86.332214, 108.00114, 111.190155, 114.34427, 135.1673,
139.18198, 142.76979, 145.09233, 0.002, 0.06, 0.07, 0.15, 0.17,
0.17, 0.18, 0.18, 0.15, 0.07, 0.09), Temp = c(16, 18, 20, 22,
24, 26, 28, 30, 32, 16.726307, 17.376368, 20.193129, 25.06135,
25.060663, 29.875113, 29.924177, 30.422773, 34.417274, 10, 12.5,
15, 18, 20, 22.5, 25, 27.5, 30, 32.5, 35)), class = "data.frame", row.names = c(NA,
-29L))
> summary(df)
ID OriginalTraitValue Temp
logger1: 9 Min. : 0.00 Min. :10.00
logger2: 9 1st Qu.: 0.00 1st Qu.:18.00
logger3:11 Median : 0.15 Median :25.00
Mean : 37.02 Mean :23.90
3rd Qu.: 90.34 3rd Qu.:29.92
Max. :145.09 Max. :35.00
在这个数据集中,我只会将ID 保留为logger3,因为只有logger3 在max(OriginalTraitValue) 之前和之后包含至少2 个值。
【问题讨论】:
-
你的预期输出是什么?
-
我编辑了我的问题以使其更清楚。预期的输出是一个代码,如果在收集最大值之前和之后少于 2 个值(按一个 ID)