美文网首页R语言基础
R中好用的row_number(),rank(),seq()函数

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

作者: LSim | 来源:发表于2020-03-20 22:11 被阅读0次

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

    在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的即为所需的数据

    相关文章

      网友评论

        本文标题:R中好用的row_number(),rank(),seq()函数

        本文链接:https://www.haomeiwen.com/subject/siisyhtx.html