数据处理|数据按从小到大分成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/

目录
相关文章
|
6月前
|
算法 测试技术 C++
【数据结构】【双堆】【滑动窗口】3013. 将数组分成最小总代价的子数组 II
【数据结构】【双堆】【滑动窗口】3013. 将数组分成最小总代价的子数组 II
|
1月前
|
SQL 算法 JavaScript
倒序排列的基本概念和应用场景
倒序排列的基本概念和应用场景
|
3月前
|
存储 搜索推荐 Java
|
5月前
|
算法 搜索推荐
数据结构和算法——表排序(算法概述、物理排序、复杂度分析,包含详细清晰图示过程)
数据结构和算法——表排序(算法概述、物理排序、复杂度分析,包含详细清晰图示过程)
42 0
|
6月前
|
搜索推荐 算法 Java
【数据结构】----先来聊聊【排序】(先导片)
【数据结构】----先来聊聊【排序】(先导片)
43 3
|
6月前
|
JavaScript Java
树状结构数据按照顺序排序
树状结构数据按照顺序排序
55 0
|
6月前
|
搜索推荐
排序的概念及其运用
排序的概念及其运用
排序的概念及其运用
|
存储 程序员 C语言
c++ 如何做出实现一组数据的实际索引
c++ 如何做出实现一组数据的实际索引
|
存储 Python
Python实现划分数组为连续数字的集合
Python实现划分数组为连续数字的集合
104 0
|
存储 程序员 C语言
c++ 如何做出实现一组数据的实际索引
C++是一种计算机高级程序设计语言, 由​​C语言​​​扩展升级而产生 , 最早于1979年由​​本贾尼·斯特劳斯特卢普​​在AT&T贝尔工