您可以检查每列的元素是否在 0.01 和 0.99 分位数之间,然后保留所有列在这些分位数之间的行
keep <- Reduce(`&`, lapply(df, function(x) x >= quantile(x, .01)
& x <= quantile(x, .99)))
df[keep,]
如果您只想排除 a 在 0.01 和 0.99 分位数之外的行,您可以这样做
keep <- df$a >= quantile(df$a, .01) & df$a <= quantile(df$a, .99)
df[keep,]
或者
keep <- lapply(df, function(x) x >= quantile(x, .01)
& x <= quantile(x, .99))
df[keep$a,]
要将极端设置为NA,您可以这样做:
keep <- df$a >= quantile(df$a, .01) & df$a <= quantile(df$a, .99)
df[!keep, 'a'] <- NA
data.table 让这变得更容易。例如,要保留 a 在 0.01 和 0.99 分位数内的行,您可以这样做
library(data.table)
setDT(df)
df[a %between% quantile(a, c(.01, .99))]