考慮下面的資料框
df <- data.frame(a=c("Y", "Y","N", "Y", "N", "N"),
b = c(200, 1,1.4,1.3,2,1.6),
c = c(200,-200,10,12,14,15),
d = c("f","f","m", "m","m","m"))
a b c d
1 Y 200.0 200 f
2 Y 1.0 -200 f
3 N 1.4 10 m
4 Y 1.3 12 m
5 N 2.0 14 m
6 N 1.6 15 m
我想修剪資料框,以便洗掉數值列中值小于 1% 且大于 99% 的行。
a b c d
1 N 1.4 10 m
2 Y 1.3 12 m
3 N 2.0 14 m
4 N 1.6 15 m
當分類變數不存在時,我可以洗掉頂部和底部不需要的值。
df %>% dplyr::select(is.numeric) %>%
filter_all(all_vars(between(., quantile(., .01), quantile(., .99))))
但我不知道如何在保持分類列的同時完成這項作業。任何幫助或提示表示贊賞。
uj5u.com熱心網友回復:
我們可以使用if_allinfilter并選擇numeric與where(is.numeric)
library(dplyr)
df %>%
filter(if_all(where(is.numeric),
~ between(.x, quantile(.x, .01), quantile(.x, .99))))
-輸出
a b c d
1 N 1.4 10 m
2 Y 1.3 12 m
3 N 2.0 14 m
4 N 1.6 15 m
uj5u.com熱心網友回復:
為什么需要檢查資料型別?您可以按行數過濾,因為它是一個分位數。
df[findInterval(1:nrow(df), quantile(1:nrow(df),c(.01, 0.99)))==1,]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/529068.html
