【问题标题】:Order factor levels in order of appearance in data set在数据集中按出现顺序排列因子水平
【发布时间】:2014-06-11 07:56:45
【问题描述】:

我有一个调查,其中必须为问题分配一个唯一 ID。有些问题会出现多次。这意味着还有一层额外的问题。在下面的示例数据中,仅包括第一层。

问题:如何按出现顺序分配唯一索引? here 提供的解决方案按字母顺序工作。我可以对因素进行排序,但这违背了在 R 中进行排序的目的[有很多问题需要排序]。

library(data.table)
dt = data.table(question = c("C", "C", "A", "B", "B", "D"), 
                value = c(10,20,30,40,20,30))

dt[, idx := as.numeric(as.factor(question))]

给予:

  question value idx
# 1:        C    10   3
# 2:        C    20   3
# 3:        A    30   1
# 4:        B    40   2
# 5:        B    20   2
# 6:        D    30   4

# but required is:
dt[, idx.required := c(1, 1, 2, 3, 3, 4)]

【问题讨论】:

    标签: r data.table r-factor


    【解决方案1】:

    我认为data.table 的方式是

    dt[, idx := .GRP, by = question]
    
    ##    question value idx
    ## 1:        C    10   1
    ## 2:        C    20   1
    ## 3:        A    30   2
    ## 4:        B    40   3
    ## 5:        B    20   3
    ## 6:        D    30   4
    

    【讨论】:

    • +1 表示 LukeA 但这确实更紧凑。两种解决方案都有效。
    • 什么是idx := .GRP
    【解决方案2】:

    您可以重新指定因子水平:

    dt[, idx := as.numeric(factor(question, levels=unique(question)))]
    #    question value idx
    # 1:        C    10   1
    # 2:        C    20   1
    # 3:        A    30   2
    # 4:        B    40   3
    # 5:        B    20   3
    # 6:        D    30   4
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-02
      • 1970-01-01
      • 1970-01-01
      • 2018-12-07
      • 2017-07-14
      • 1970-01-01
      • 2017-07-18
      • 2021-11-07
      相关资源
      最近更新 更多