数据处理|数据按从小到大分成n类

简介: 数据处理|数据按从小到大分成n类

最近做项目遇到了一个实际数据清洗的问题,如何将连续数据按从大到小分成n类?刚开始我是打算用tidyverse包的,但是找不到合适的函数。只能通过较为笨拙的方法进行了。

之后通过stackoverflow网站[1]进行查询才发现原来有这么好用的窗口函数

较为笨拙的方法

使用Rbase包中的数据框操作进行,首先随机产生一个数据框作为模拟数据。

temp <- data.frame(name=letters[1:12], value=rnorm(12), q=rep(NA, 12))
head(temp)
#    name       value quartile
# 1     a  2.55118169       NA
# 2     b  0.79755259       NA
# 3     c  0.16918905       NA
# 4     d  1.73359245       NA
# 5     e  0.41027113       NA
# 6     f  0.73012966       NA
temp.sorted <- temp[order(temp$value), ]
temp.sorted$q <- rep(1:4, each=12/4)
temp <- temp.sorted[order(as.numeric(rownames(temp.sorted))), ]
head(temp)
#    name       value        q
# 1     a  2.55118169        4
# 2     b  0.79755259        3
# 3     c  0.16918905        2
# 4     d  1.73359245        4
# 5     e  0.41027113        2
# 6     f  0.73012966        3

使用dplyr包中的ntile()

首先构建一个数据框,包含a,b变量。以该数据框进行演示:

foo <- data.frame(a = 1:100,
                  b = runif(100, 50, 200),
                  stringsAsFactors = FALSE)

载入tidyverse包[2],内部包含了dplyr包[3]。然后使用管道函数,利用函数ntile()构建新的列,列名为q。或者不用通道函数,直接加载dplyr包也可以。

library(tidyverse)
foo %>%
    mutate(q = ntile(b, 10))
#  a         b        q
#1 1  93.94754        2
#2 2 172.51323        8
#3 3  99.79261        3
#4 4  81.55288        2
#5 5 116.59942        5
#6 6 128.75947        6

参考资料

[1]

How to quickly form groups : https://stackoverflow.com/questions/4126326/how-to-quickly-form-groups-quartiles-deciles-etc-by-ordering-columns-in-a?noredirect=1

[2]

tidyverse包: https://www.tidyverse.org/

[3]

dplyr包: https://dplyr.tidyverse.org/

目录
相关文章
|
数据可视化
R可视乎|三维散点图
R可视乎|三维散点图
365 0
|
数据可视化
R可视乎|主成分分析结果可视化
R可视乎|主成分分析结果可视化
319 0
|
数据可视化
时间序列交叉验证 R 语言实现
时间序列交叉验证 R 语言实现
1057 0
|
数据可视化 算法 安全
超详细的 R 语言插补缺失值教程来啦~
超详细的 R 语言插补缺失值教程来啦~
650 0
|
iOS开发 MacOS Windows
将 PDF 转化为 Word 文件
将 PDF 转化为 Word 文件
521 0
中心极限定理:从1733到1937,一场跨越两百年的传奇
中心极限定理:从1733到1937,一场跨越两百年的传奇
715 0
|
Serverless
统计问题|绘制任意分布的 QQ 图
统计问题|绘制任意分布的 QQ 图
448 1
复现sci顶刊中的画中画(局部细节放大)
复现sci顶刊中的画中画(局部细节放大)
1743 0
|
数据安全/隐私保护
利用 cowplot 包快速对齐图片
利用 cowplot 包快速对齐图片
485 0
|
机器学习/深度学习 运维 算法
【机器学习】十大算法之一 “SVM”
支持向量机(Support Vector Machine,SVM)是机器学习十大算法之一,是一种二分类模型。SVM将实例空间映射到一个高维空间,将空间进行线性划分,同时使得分类面到两端最近的数据点的距离(margin)最大化,因此SVM也被称为最大间隔分类器(Maximal Margin Classifier)。SVM是由Vapnik和Cortes于1995年提出的,是一种广泛应用的机器学习算法,具有很好的泛化能力和鲁棒性。SVM是一种非常有用的算法,它在分类和回归问题中都表现出色。
1792 0
【机器学习】十大算法之一 “SVM”