前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据处理|数据按从小到大分成n类

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

作者头像
庄闪闪
发布2021-04-09 11:02:56
5070
发布2021-04-09 11:02:56
举报
文章被收录于专栏:庄闪闪的R语言手册

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

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

较为笨拙的方法

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

代码语言:javascript
复制
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
代码语言:javascript
复制
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变量。以该数据框进行演示:

代码语言:javascript
复制
foo <- data.frame(a = 1:100,
                  b = runif(100, 50, 200),
                  stringsAsFactors = FALSE)

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

代码语言:javascript
复制
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/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 庄闪闪的R语言手册 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 较为笨拙的方法
  • 使用dplyr包中的ntile()
    • 参考资料
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档