R中好用的row_number(),rank(),seq()函数

大家在做数据处理的时候,都会遇到这样的问题,一个表中同一个字段会对应多个值,但我们只想取出第一个值,或者想取出第一行的值。

在R中,使用包可以很方便的对其进行处理。

R语言的dplyr包实现

在a数据中,当一个SKU存在多条记录,选取 最小数量,日期最新的那个SKU。

方法1、rank()函数

a$Quantity <- as.numeric(a$Quantity)

a$Date <- lubridate::ymd(a$Date)

a %>% dplyr::group_by(SKU) %>% dplyr::arrange(Quantity,desc(date)) %>% dplyr::mutate(rn=rank(desc(Date),ties.method='first')) %>% dplyr::filter(rn==1)

arrange中,默认为升序。如需降序,需desc。

ties.method='first',SKU按照顺序排列。否则,序号不连续。

方法2、row_number()函数

a %>% dplyr::group_by(SKU) %>% arrange(Quantity,desc(Date)) %>% dplyr::mutate(index=row_number()) %>% dplyr::filter(index==1)

方法3、seq()函数

 a %>% dplyr::group_by(SKU)  %>% dplyr::arrange(QUANTITY,desc(Date)) %>% mutate(id=seq(1,length(SKU))) %>% dplyr::filter(id==1)

R语言的data.table包实现

library(data.table) #加载数据包

a<- as.data.table(a) #将数据框转成data.table格式

class(a) #查看类型

a[, rn := rank(- Quantity), by = 'SKU']  #新增一列rn,按照SKU分组,Quantity升序排列

a[order(SKU, rn)] #order函数

a[rn == 1][order(SKU)] #取出rn = 1的即为所需的数据

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容