【问题标题】:Running count based on field in R基于 R 中的字段的运行计数
【发布时间】:2015-09-24 10:21:01
【问题描述】:

我有一个这种格式的数据集

User       
1 
2
3
2
3
1  
1      

现在我想添加一个计数列来计算用户的出现次数。我想要以下格式的输出。

User    Count
1       1
2       1 
3       1
2       2
3       2
1       2
1       3

我的解决方案很少,但所有这些解决方案都有些慢。

Running count variable in R

我的 data.frame 现在有 100,000 行,很快它可能会增加到 100 万行。我需要一个也很快的解决方案。

【问题讨论】:

    标签: r cumulative-sum


    【解决方案1】:

    使用aveseq.int 相当容易:

    > ave(User,User, FUN= seq.int)
    [1] 1 1 1 2 2 2 3
    

    这是一种常见的策略,通常在项目彼此相邻时使用。第二个参数是分组变量,在这种情况下,第一个参数实际上是一种虚拟参数,因为它唯一的贡献是一个长度,ave 不需要为确定的值具有相邻行在分组内。

    【讨论】:

      【解决方案2】:

      您可以使用我的“splitstackshape”包中的getanID

      library(splitstackshape)
      getanID(mydf, "User")
      ##    User .id
      ## 1:    1   1
      ## 2:    2   1
      ## 3:    3   1
      ## 4:    2   2
      ## 5:    3   2
      ## 6:    1   2
      ## 7:    1   3
      

      这本质上是一种使用“data.table”的方法,如下所示:

      as.data.table(mydf)[, count := seq(.N), by = "User"][]
      

      【讨论】:

        【解决方案3】:

        一个使用dplyr的选项

         library(dplyr)
         df1 %>%
              group_by(User) %>%
              mutate(Count=row_number())
         #    User Count
         #1    1     1
         #2    2     1
         #3    3     1
         #4    2     2
         #5    3     2
         #6    1     2
         #7    1     3
        

        使用sqldf

        library(sqldf)
        sqldf('select a.*, 
                   count(*) as Count
                   from df1 a, df1 b
                   where a.User = b.User and b.rowid <= a.rowid
                   group by a.rowid')
        #   User Count
        #1    1     1
        #2    2     1
        #3    3     1
        #4    2     2
        #5    3     2
        #6    1     2
        #7    1     3
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-03-27
          • 2013-08-04
          • 2016-06-15
          • 1970-01-01
          • 1970-01-01
          • 2023-03-22
          • 1970-01-01
          • 2023-01-21
          相关资源
          最近更新 更多