【问题标题】:Transforming a looping factor variable into a sequence of numerics将循环因子变量转换为数字序列
【发布时间】:2019-12-05 10:31:26
【问题描述】:

我有一个 6 级的因子变量,简化后如下所示:

1 1 2 2 2 3 3 3 4 4 4 4 5 5 5 6 6 6 1 1 1 2 2 2 2... 1 1 1 2 2...  (with n = 78)

请注意,每个数字大部分重复但并非总是三遍。 我需要将此变量转换为以下模式:

1 1 2 2 2 3 3 3 4 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 8... 

其中6个级别的每次重复连续计数升序。 有什么方法/任何功能可以让我这样做吗?

抱歉我的描述不好!

【问题讨论】:

  • 嗨 Bjorn,你能写一些代码来生成示例数据吗?
  • 如果没有,你能dput()你的部分数据吗?
  • 试试?sort。它对任何向量进行排序

标签: r variables transform


【解决方案1】:

假设您有一个数字向量来表示您发布的简化版本。即x = c(1,1,1,2,2,3,3,3,1,1,2,2),你可以使用这个:

library(dplyr)

cumsum(x != lag(x, default = 0))

# [1] 1 1 1 2 2 3 3 3 4 4 5 5

将每个值与其前一个值进行比较,如果它们不同,则加 1(从 1 开始)。

【讨论】:

    【解决方案2】:

    也许你可以试试rle,即,

    v <- rep(seq_along((v<-rle(x))$values),v$lengths)
    

    虚拟数据示例

    x = c(1,1,1,2,2,3,3,3,4,4,5,6,1,1,2,2,3,3,3,4,4)
    

    那么我们可以得到

    > v
     [1]  1  1  1  2  2  3  3  3  4  4  5  6  7  7  8  8  9  9
    [19]  9 10 10
    

    【讨论】:

      【解决方案3】:

      base中你可以使用diffcumsum

      c(1, cumsum(diff(x)!=0)+1)
      # [1] 1 1 2 2 2 3 3 3 4 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 8
      

      数据:

      x <- c(1,1,2,2,2,3,3,3,4,4,4,4,5,5,5,6,6,6,1,1,1,2,2,2,2)
      

      【讨论】:

        猜你喜欢
        • 2017-09-30
        • 1970-01-01
        • 1970-01-01
        • 2019-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多