我有一個如下所示的資料框
d1<-c('a','b','c','d','e','f','g','h','i','j','k','l')
d2<-c(1,5,1,2,13,2,32,2,1,2,4,5)
df1<-data.frame(d1,d2)
看起來像這張圖中的資料表

我的目標是根據每 3 行中 d2 的哪個值最大來過濾行。所以它看起來像這樣:
謝謝!
uj5u.com熱心網友回復:
我們可以使用rollmaxfromzoo到filter行
library(dplyr)
library(zoo)
df1 %>%
filter(d2 == na.locf0(rollmax(d2, k = 3, fill = NA)))
d1 d2
1 b 5
2 e 13
3 g 32
4 l 5
uj5u.com熱心網友回復:
您可以創建一個分組變數,將觀察結果分成 3 組。我首先創建了一個從 1 到總行數的序列,增加了 3。然后將該序列的每個數字重復 3 次并對結果進行子集化以獲得一個向量相同長度的資料,以防觀察的數量不能完全被 3 整除。然后簡單地根據 d2 列中每個組的最大數量過濾行。
library(dplyr)
df1 %>%
mutate(group = rep(seq(1, n(), by = 3), each = 3)[1:n()]) %>%
group_by(group) %>%
filter(d2 == max(d2))
# A tibble: 4 x 3
# Groups: group [4]
# d1 d2 group
# <chr> <dbl> <dbl>
# 1 b 5 1
# 2 e 13 4
# 3 g 32 7
# 4 l 5 10
uj5u.com熱心網友回復:
另一個解決方案:
library(tidyverse)
d1<-c('a','b','c','d','e','f','g','h','i','j','k','l')
d2<-c(1,5,1,2,13,2,32,2,1,2,4,5)
df1<-data.frame(d1,d2)
df1 %>%
mutate(id = rep(1:(n()/3), each=3)) %>%
group_by(id) %>%
slice_max(d2) %>%
ungroup %>% select(-id)
#> # A tibble: 4 × 2
#> d1 d2
#> <chr> <dbl>
#> 1 b 5
#> 2 e 13
#> 3 g 32
#> 4 l 5
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/399318.html
上一篇:根據資料框中另一列的值附加值的列
下一篇:Pandas遍歷行并構建新框架
