我試圖過濾一個資料框架的多列(15)。具體來說,我想用Q3 IQR1.5和Q1 - IQR1.5的方法去除離群值。
玩具的例子:
library(tidyverse)
aa < - c(2,3。 4,3。 2,2。 1, 6, 5, 4, 3,1, 15)
bb <- c(/span>0. 2,20。 30, 40, 30, 20, 20, 10, 30, 40, 30,10, 10)
cc < - c(-9。 2。 3, 4, 3, 2, 2, 1, 5, 4, 3,1, 25)
df <- tibble(aa,bb,cc)
我試了一下,沒有成功:
我試了一下,沒有成功。
i <- NULL
for(i in 1: ncol(fat)){
po <- fat %>%
過濾(. [[i]] > = (quantile(. [[i]], 。 25) - IQR(. [[i]]) * 1。 5))
po <- fat %>%
過濾(. [[i]] < = (quantile(. [[i]], 。 75) IQR(. [[i]]) * 1。 5))
}。
我可以使用過濾器和地圖函式來做這個嗎?以及如何做?
多謝 GS
uj5u.com熱心網友回復:
我們可以使用filter與if_all/across
library(dplyr)
df %>%
filter(if_all(where( is. numeric), ~ (. >= (quantile(. , .25) - IQR(. ) * 1.5 )) &
(.<= (quantile(. , .75) IQR(. ) * 1。 5 ))))
uj5u.com熱心網友回復:
這里有幾個使用sapply/lapply的基礎R選項。我們撰寫一個自定義函式來檢測例外值,并將其應用于每一列,只選擇其中沒有例外值的行。
is_outlier < - function(x) {
x <= (quantile(x, . 25) - IQR(x) * 1。 5) | x > = (quantile(x, . 75) IQR(x) * 1。 5)
}
df[/span>! Reduce(`|`, lapply(df。 is_outlier)), 】
# aa bb cc
# <dbl> <dbl> <dbl>
# 1 3 20 2
# 2 4 30 3
# 3 3 40 4 # 3 3 40 4
# 4 2 30 3 # 3 3 4
# 5 2 20 2 # 5 2 20 2
# 6 1 20 2 # 6 1 20 2
# 7 6 10 1 # 6 1 20 2
# 8 5 30 5 # 8 5 30 5
# 9 4 40 4 # 9 4 40 4
#10 3 30 3
#11 1 10 1
使用sapply -
df[rowSums(sapply(df。 is_outlier) == 0。 ]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/322172.html
標籤:
上一篇:透視資料T-SQL
