【问题标题】:R create group variable based on row order and conditionR根据行顺序和条件创建组变量
【发布时间】:2020-01-21 07:09:28
【问题描述】:

我有一个包含多个未明确说明的组的数据框。相反,新组总是在type == 1 时开始,并且对于包含type == 2 的后续行也是如此。每组的行数可以变化。

如何根据另一列的顺序显式创建新变量?当然,这些组应该是排他性的。

我的数据:

df <- data.frame(type = c(1,2,2,1,2,1,2,2,2,1),
                 stand = 1:10)

新组 myGroup 的预期输出:

   type stand myGroup
1     1     1       a
2     2     2       a
3     2     3       a
4     1     4       b
5     2     5       b
6     1     6       c
7     2     7       c
8     2     8       c
9     2     9       c
10    1    10       d

【问题讨论】:

    标签: r dataframe row


    【解决方案1】:

    一个选项可能是:

    with(df, letters[cumsum(type == 1)])
    
    [1] "a" "a" "a" "b" "b" "c" "c" "c" "c" "d"
    

    【讨论】:

      【解决方案2】:

      这是另一个使用rep() + diff() 的选项,但不像@tmfmnk 的方法那么简单

      idx <- which(df$type==1)
      v <- diff(which(df$type==1))
      df$myGroup <- rep(letters[seq(idx)],c(v <- diff(which(df$type==1)),nrow(df)-sum(v)))
      

      这样

      > df
         type stand myGroup
      1     1     1       a
      2     2     2       a
      3     2     3       a
      4     1     4       b
      5     2     5       b
      6     1     6       c
      7     2     7       c
      8     2     8       c
      9     2     9       c
      10    1    10       d
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-07
        • 1970-01-01
        相关资源
        最近更新 更多