R语言如何使用subset和分位数筛选数据点数量前25%的国家
问题解决说明及代码
原代码错误原因
- 逻辑偏离需求:你对
TIME列计算分位数,完全没有按国家维度统计数据点数量 - 语法不符合
subset要求:subset第二个参数需要传入和数据集行数匹配的布尔筛选向量,你直接传入单个分位数值,筛选逻辑不成立,因此返回空结果
正确实现步骤
- 统计每个国家的总数据点数量
country_record_cnt <- table(drugs1$LOCATION)
- 计算各国数据点数量的75%分位数(数据量排名前25%即数值大于等于该分位数)
cnt_q75 <- quantile(country_record_cnt, 0.75)
- 筛选出符合数据量要求的国家代码
top_countries <- names(country_record_cnt)[country_record_cnt >= cnt_q75]
- 结合
%in%运算符用subset筛选原数据集的对应记录
final_df <- subset(drugs1, LOCATION %in% top_countries)
如果需要更简洁的写法,也可以合并为一行代码:
final_df <- subset(drugs1, LOCATION %in% names(which(table(LOCATION) >= quantile(table(LOCATION), 0.75))))
内容的提问来源于stack exchange,提问作者T.P
相关产品推荐
相关产品推荐

