【问题标题】:Running count of specified value at or before row. Not consecutive count在行或行之前的指定值的运行计数。不连续计数
【发布时间】:2014-05-03 20:45:25
【问题描述】:

我有一个带有变量v1 的数据框。我想要一个变量 v2 作为行中零的运行计数(即仅在该行及其之前计数零)。 Conversley,我希望 v3 成为非零数字的运行计数。数据框dat 说明了所需的输出。

dat <- structure(list(v1 = c(0L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 10L, 
2L, 0L), v2 = c(1L, 2L, 2L, 3L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 6L
), v3 = c(0L, 0L, 1L, 1L, 1L, 1L, 2L, 3L, 4L, 5L, 6L, 6L)), .Names = c("v1", 
"v2", "v3"), class = "data.frame", row.names = c(NA, -12L))

> dat
   v1 v2 v3
1   0  1  0
2   0  2  0
3   1  2  1
4   0  3  1
5   0  4  1
6   0  5  1
7   1  5  2
8   1  5  3
9   1  5  4
10 10  5  5
11  2  5  6
12  0  6  6

【问题讨论】:

    标签: r count dataframe cumulative-sum


    【解决方案1】:

    您想在此处使用cumsum,作为给定条件的累积和。

    > v1 <- c(0, 0, 1, 0, 0, 0, 1, 1, 1, 10, 2, 0)
    > v2 <- cumsum(v1 == 0)
    > v3 <- cumsum(v1 > 0)
    > data.frame(v1, v2, v3)
    ##    v1 v2 v3
    ## 1   0  1  0
    ## 2   0  2  0
    ## 3   1  2  1
    ## 4   0  3  1
    ## 5   0  4  1
    ## 6   0  5  1
    ## 7   1  5  2
    ## 8   1  5  3
    ## 9   1  5  4
    ## 10 10  5  5
    ## 11  2  5  6
    ## 12  0  6  6
    

    【讨论】:

      【解决方案2】:
      within(dat, {
        v33 <- cumsum(v1 != 0)
        v22 <- cumsum(v1 == 0)
      })
      
      #    v1 v2 v3 v22 v33
      # 1   0  1  0   1   0
      # 2   0  2  0   2   0
      # 3   1  2  1   2   1
      # 4   0  3  1   3   1
      # 5   0  4  1   4   1
      # 6   0  5  1   5   1
      # 7   1  5  2   5   2
      # 8   1  5  3   5   3
      # 9   1  5  4   5   4
      # 10 10  5  5   5   5
      # 11  2  5  6   5   6
      # 12  0  6  6   6   6
      

      【讨论】:

        猜你喜欢
        • 2015-01-20
        • 2013-11-28
        • 1970-01-01
        • 2015-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-29
        相关资源
        最近更新 更多