我有一個df,它有兩列,time和val。df是按時間排列的。我想從最大值中過濾出所有的行,在這種情況下,它是1.29。我在下面提供了一個例子:
library(tidyverse)
library(lubridate)
# 這是整個df的內容
df1 <- tibble::/span>tribble()
~date, ~val,
"2021-09-16 11:02:45",/span> 1.21,
"2021-09-16 11:02:45",/span> 1.21,
"2021-09-16 11:02:45",/span> 1.21,
"2021-09-16 11:02:45",/span> 1.22,
"2021-09-16 11:02:45",/span> 1.22,
"2021-09-16 11:02:45",/span> 1.22,
"2021-09-16 11:02:37",/span> 1.22,
"2021-09-16 10:59:29",/span> 1.29,
"2021-09-16 10:59:14",/span> 1.29,
"2021-09-16 10:59:14",/span> 1.28,
"2021-09-16 10:59:14",/span> 1.28,
"2021-09-16 10:58:17",/span> 1.28,
"2021-09-16 10:58:17",/span> 1.28,
"2021-09-16 10:58:05",/span> 1.26,
"2021-09-16 10:58:05",/span> 1.26,
"2021-09-16 10:58:05",/span> 1.23,
"2021-09-16 10:57:16", 1.23
) %>%
mutate(date = ymd_hms(date))
# 這就是我所尋找的結果。
tibble::tribble()
~date, ~val,
"2021-09-16 10:59:29",/span> 1.29,
"2021-09-16 10:59:14",/span> 1.29,
"2021-09-16 10:59:14",/span> 1.28,
"2021-09-16 10:59:14",/span> 1.28,
"2021-09-16 10:58:17",/span> 1.28,
"2021-09-16 10:58:17",/span> 1.28,
"2021-09-16 10:58:05",/span> 1.26,
"2021-09-16 10:58:05",/span> 1.26,
"2021-09-16 10:58:05",/span> 1.23,
"2021-09-16 10:57:16", 1.23
) %>%
mutate(date = ymd_hms(date))
如何有效地做到這一點,有什么想法嗎?
uj5u.com熱心網友回復:
如果我理解正確的話,這可能會解決你的問題
。library(dplyr)
df1 %>%
filter(date < = first(date[val == max(val)]))
# A tibble: 10 x 2
日期值
<dttm>/span> <dbl>
1 2021-09-16 10。 59: 29 1. 29
2 2021-09-16 10。 59: 14 1. 29
3 2021-09-16 10。 59: 14 1. 28
4 2021-09-16 10。 59: 14 1. 28
5 2021-09-16 10。 58: 17 1. 28
6 2021-09-16 10。 58: 17 1. 28
7 2021-09-16 10。 58: 05 1. 26
8 2021-09-16 10。 58: 05 1. 26
9 2021-09-16 10。 58: 05 1. 23
10 2021-09-16 10。 57: 16 1. 23
uj5u.com熱心網友回復:
下面是其他幾個使用match的dplyr選項
- 使用
slice-
library(dplyr)
df1 %> % slice(match(max(val)。 val)。 n())
# date val
# <dttm> <dbl>
# 1 2021-09-16 10:59:29 1.29
# 2 2021-09-16 10:59:14 1.29
# 3 2021-09-16 10:59:14 1.28[/span
# 4 2021-09-16 10:59:14 1.28[/span
# 5 2021-09-16 10:58:17 1.28[/span
# 6 2021-09-16 10:58:17 1.28[/span
# 7 2021-09-16 10:58:05 1.26[/span
# 8 2021-09-16 10:58:05 1.26[/span
# 9 2021-09-16 10:58:05 1.23[/span
#10 2021-09-16 10:57:16 1.23
- 使用
filter
df1 %> % filter(row_number() > = match(max(val)。 val))
你也可以使用基礎R來做同樣的事情。
df1[match(max(df1$val)。 df1$val)。 nrow(df1), 】
uj5u.com熱心網友回復:
我們可以使用
library(dplyr)
df1 %>%
filter(row_number() >=which. max(val))
輸出
# A tibble: 10 x 2
日期值
<dttm>/span> <dbl>
1 2021-09-16 10。 59: 29 1. 29
2 2021-09-16 10。 59: 14 1. 29
3 2021-09-16 10。 59: 14 1. 28
4 2021-09-16 10。 59: 14 1. 28
5 2021-09-16 10。 58: 17 1. 28
6 2021-09-16 10。 58: 17 1. 28
7 2021-09-16 10。 58: 05 1. 26
8 2021-09-16 10。 58: 05 1. 26
9 2021-09-16 10。 58: 05 1. 23
10 2021-09-16 10。 57: 16 1. 23
uj5u.com熱心網友回復:
df1 %>%
filter(cumsum(val == max(val) > = 1)
在這里,我們保留那些累計達到最大值的次數至少為1的記錄。
我假設這里的資料已經按照日期進行了排序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/332207.html
標籤:
