【问题标题】:Add line numbers per group of variable values in R dataframe [duplicate]在R数据框中添加每组变量值的行号[重复]
【发布时间】:2017-04-18 12:26:21
【问题描述】:

我有一个像这样的 R 数据框:

blogger; date; word
joe; 2016-11-19; ears
paul; 2017-04-02; dilapidated
joe; 2016-11-21; night
joe; 2016-11-20; girl
paul; 2017-04-01; crumpled
paul; 2017-04-03; bellow

我想先按blogger 排序,然后按date。然后,我想为每个博主添加一个行号列。

我有这个:

# make linenumbers
df <- df %>%
    arrange(blogger,date) %>%
    mutate(linenumber = row_number())

但这显然不是从每个博主的第 1 行开始的。我得到的输出是:

blogger; date; word; linenumber
joe; 2016-11-19; ears; 1
joe; 2016-11-20; girl; 2
joe; 2016-11-21; night; 3
paul; 2017-04-01; crumpled; 4
paul; 2017-04-02; dilapidated; 5
paul; 2017-04-03; bellow; 6

但我想要的输出是:

blogger; date; word; linenumber
joe; 2016-11-19; ears; 1
joe; 2016-11-20; girl; 2
joe; 2016-11-21; night; 3
paul; 2017-04-01; crumpled; 1
paul; 2017-04-02; dilapidated; 2
paul; 2017-04-03; bellow; 3

【问题讨论】:

    标签: r dataframe tidyverse


    【解决方案1】:

    如果不需要对行进行排序,您可以这样做:

    d$linenumber <- ave(as.integer(d$blogger), d$blogger, FUN=seq_along)
    # > d
    #   blogger        date         word linenumber
    # 1     joe  2016-11-19         ears          1
    # 2    paul  2017-04-02  dilapidated          1
    # 3     joe  2016-11-21        night          2
    # 4     joe  2016-11-20         girl          3
    # 5    paul  2017-04-01     crumpled          2
    # 6    paul  2017-04-03       bellow          3
    

    数据:

    d <- read.table(header=TRUE, sep=';', text=
    "blogger; date; word
    joe; 2016-11-19; ears
    paul; 2017-04-02; dilapidated
    joe; 2016-11-21; night
    joe; 2016-11-20; girl
    paul; 2017-04-01; crumpled
    paul; 2017-04-03; bellow")
    

    【讨论】:

      【解决方案2】:

      在博客上尝试group_by

      df %>% arrange(blogger, date) %>% 
      group_by(blogger) %>% 
      mutate(linenumber = row_number()) %>%
      ungroup()
      

      【讨论】:

        【解决方案3】:

        我们可以通过 data.table 的便捷函数 (rowid) 做到这一点

        library(data.table)
        setDT(d)[, linenumber := rowid(blogger)]
        d   
        #   blogger        date         word linenumber
        #1:     joe  2016-11-19         ears          1
        #2:    paul  2017-04-02  dilapidated          1
        #3:     joe  2016-11-21        night          2
        #4:     joe  2016-11-20         girl          3
        #5:    paul  2017-04-01     crumpled          2
        #6:    paul  2017-04-03       bellow          3
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多