gpt4 book ai didi

r - 排除 R 中 df 中顶部和底部 1% 的数据

转载 作者:行者123 更新时间:2023-12-02 06:48:33 27 4
gpt4 key购买 nike

对于示例数据框:

set.seed (1000)
a <- rnorm(1000)
b <- seq(1, 1000, by=1)
df <- data.frame(b, a)

我想排除前 1% 和后 1% 的数据(a 列)。

我已经阅读了 R 中有关修剪和分位数的信息,但似乎无法让它们发挥作用。

谁能帮忙解释一下我是怎么做到的:

一个。将这些末端设置为 NA

b.从我的数据框中删除这些四肢

最佳答案

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

关于r - 排除 R 中 df 中顶部和底部 1% 的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50976407/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com