如何基于鸢尾花数据集创建显示观测值所属百分位区间的变量
如何基于鸢尾花数据集创建显示观测值所属百分位区间的变量
嘿,我来帮你把这个需求落地——用R的tidyverse工具包给鸢尾花数据集里的花萼长度按百分位划分区间,生成对应的分组变量,操作起来超简单,具体步骤如下:
核心实现代码
先确保你已经安装了tidyverse包,然后运行这段代码就能搞定:
library(tidyverse) # 给iris数据集新增Range列,标记Sepal.Length所属的百分位区间 iris_with_range <- iris %>% mutate(Range = cut( Sepal.Length, quantile(Sepal.Length, probs = c(0, 0.2, 0.4, 0.6, 0.8, 1)), include.lowest = TRUE ))
代码细节拆解
library(tidyverse):加载包含dplyr、ggplot2等工具的tidyverse全家桶,我们用到的mutate函数就来自dplyrmutate(Range = ...):新增一列名为Range的变量,专门用来存储百分位区间标签cut():这是实现区间划分的核心函数,参数作用如下:- 第一个参数
Sepal.Length:指定要按哪一列的数值来划分区间 - 第二个参数
quantile(..., probs = c(0, 0.2, 0.4, 0.6, 0.8, 1)):用百分位函数生成切割点,这里是把数据分成5个等距的百分位区间(0-20%、20-40%…80-100%) include.lowest = TRUE:确保数据里的最小值(也就是4.3)能被包含在第一个区间里,避免出现遗漏
- 第一个参数
运行结果示例
执行代码后,你会得到带区间标签的数据集,以下是前10行的展示:
Sepal.Length Sepal.Width Petal.Length Petal.Width Species Range 1 4.3 3.0 1.1 0.1 setosa [4.3,4.6] 2 4.4 2.9 1.4 0.2 setosa [4.3,4.6] 3 4.6 3.1 1.5 0.2 setosa [4.3,4.6] 4 4.6 3.4 1.4 0.3 setosa [4.3,4.6] 5 4.7 3.2 1.3 0.2 setosa (4.6,4.8] 6 4.8 3.4 1.6 0.2 setosa (4.6,4.8] 7 4.8 3.0 1.4 0.1 setosa (4.6,4.8] 8 4.9 3.0 1.4 0.2 setosa (4.8,5] 9 4.9 3.1 1.5 0.1 setosa (4.8,5] 10 ...
新增的Range列清晰标记了每一行的花萼长度属于哪个百分位区间,后续不管是分组统计还是做可视化分析,这个变量都能帮上大忙~
备注:内容来源于stack exchange,提问作者bill999
相关产品推荐
相关产品推荐

