您可以检查每列的元素是否在 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,]
Or
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))]