我有以下数据框:
d =
id group value
1 A 1
2 A 2
3 A 10
4 B 100
5 B 200
6 B 1000
Run Code Online (Sandbox Code Playgroud)
我想用NA替换99%四分位数以上的值,具体取决于它们所属的组.在这个例子中将是观察(id)3和6.到目前为止,我有这段代码可以完成我想要的但不依赖于每个组.
d[ d$value.TA < quantile(d$value, 0.99), 'value'] <- NA
Run Code Online (Sandbox Code Playgroud)
有帮助吗?
您可以使用group_by()dplyr中的函数:
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
Run Code Online (Sandbox Code Playgroud)
数据:
d <- data.frame(
id = seq(1, 6),
group = rep(c("A", "B"), each = 3),
value = c(1,2,10,100,200,1000)
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |