根据四分位数和组替换异常值
Substitute outliers depending on quartile and group
我有以下数据框:
d =
id group value
1 A 1
2 A 2
3 A 10
4 B 100
5 B 200
6 B 1000
我想根据它们所属的组用 NA 替换 99% 四分位数以上的值。在这个例子中是观察 (id) 3 和 6。到目前为止,我有这段代码可以做我想做的,但不依赖于每个组。
d[ d$value.TA < quantile(d$value, 0.99), 'value'] <- NA
有什么帮助吗?
您可以使用 dplyr 中的 group_by()
函数:
library(dplyr)
d <- d %>%
group_by(group) %>%
mutate(value.TA = ifelse(value < quantile(value, 0.99),
value, NA)) %>%
ungroup()
> d
# A tibble: 6 x 4
id group value value.TA
<int> <fctr> <dbl> <dbl>
1 1 A 1 1
2 2 A 2 2
3 3 A 10 NA
4 4 B 100 100
5 5 B 200 200
6 6 B 1000 NA
数据:
d <- data.frame(
id = seq(1, 6),
group = rep(c("A", "B"), each = 3),
value = c(1,2,10,100,200,1000)
)
我有以下数据框:
d =
id group value
1 A 1
2 A 2
3 A 10
4 B 100
5 B 200
6 B 1000
我想根据它们所属的组用 NA 替换 99% 四分位数以上的值。在这个例子中是观察 (id) 3 和 6。到目前为止,我有这段代码可以做我想做的,但不依赖于每个组。
d[ d$value.TA < quantile(d$value, 0.99), 'value'] <- NA
有什么帮助吗?
您可以使用 dplyr 中的 group_by()
函数:
library(dplyr)
d <- d %>%
group_by(group) %>%
mutate(value.TA = ifelse(value < quantile(value, 0.99),
value, NA)) %>%
ungroup()
> d
# A tibble: 6 x 4
id group value value.TA
<int> <fctr> <dbl> <dbl>
1 1 A 1 1
2 2 A 2 2
3 3 A 10 NA
4 4 B 100 100
5 5 B 200 200
6 6 B 1000 NA
数据:
d <- data.frame(
id = seq(1, 6),
group = rep(c("A", "B"), each = 3),
value = c(1,2,10,100,200,1000)
)