r - 尽管有重复,但分位数削减
问题描述
我有一个包含 > 900,000 行的数据集,其中包含许多重复项:
> sum(duplicated(df$colB))
[1] 904515
因此,当我尝试将分位数切割成十个同样大的子集时,我得到了一个错误
> df$colC <- cut(df$colB, quantile(df$colB,c(0:10)/10), labels=FALSE,
+ include.lowest=TRUE)
Error in cut.default(df$colB, quantile(df$colB, :
'breaks' are not unique
使用unique(quantile(df$colB,c(0:10)/10))
不会给出同样大小的子集。必须有一个简单的解决方案来进行分位数切割,除了colB
. 由于我有大量行,因此启动循环序列可能需要很长时间。有任何想法吗?
虚拟数据集:
set.seed(10)
B <- round(runif(100, 0, 0.4), digits=2) # gives 63 duplicates
df$colB <- B
df <- as.data.frame(df)
解决方案
可能有比这更简洁的解决方案,但这会做到:
df$colC <- ceiling((1:nrow(df))*10/nrow(df))[rank(df$colB, ties.method = 'first')]
table(df$colC)
#>
#> 1 2 3 4 5 6 7 8 9 10
#> 10 10 10 10 10 10 10 10 10 10
推荐阅读
- css - 如何将水平滚动添加到垫子自动完成
- php - Laravel 向多个表中插入数据
- openlayers - OpenLayers:定期更新瓦片层
- java - 如何在 Spring Boot 中启用/禁用特定的休息端点?
- xml - 从 xsl 生成的文档中推断数据
- angular - 如何从Angular 8中url中的查询参数中检索对象
- android - Android - 由于 Resources$NotFoundException 而导致的 RuntimeException
- ruby-on-rails - 我们如何在 20 天内使用 Ruby on Rails 开发电子商务网站并从头开始使其功能齐全?
- python - 从 selenium 重定向到最终 url 失败
- javascript - 保留鼠标移动的不透明度 - 画布