【问题标题】:R: Named vector to reclassify many classes data.tableR:命名向量重新分类许多类 data.table
【发布时间】:2021-09-07 07:21:20
【问题描述】:

我需要在data.table 中重新分类我的值,例如创建一个新列。我有超过 30 个类要重新分类,每个类都使用 >3GB 的 .csv 数据集,因此我正在寻找一种高效的工具,它也足够易于阅读。我想知道是否有比case_when 更好的东西,并根据答案here. 尝试使用named vector

但是,我有两个问题:

  • 首先,如何让named vector 用于我的示例?
  • 其次,named_vector 会比case_when 更快吗? (值得吗?)

这是我的虚拟示例和预期输出:

 # Create data table
 dd <- data.table(id = 1:5,
                   cell = c('k8', 
                            'k9',
                            "w7",
                            'w7',
                            'k3'))
  # create a named vector
  v1 <- setNames(c('k8', 
                   'k9',
                   'w7',
                   'k3'), as.character(1:4))
  
  # Classify the data using `case_when`
  dd %>%  
    mutate(nb = case_when(
      cell == "k8" ~ "1",
      cell == "k9" ~ "2",
      cell == "w7" ~ "3",
      cell == "k3" ~ "4"))
      
  # Classify the data using `named vector` - not working!
  dd %>%
    mutate(cell, ~ v1[as.character(.x)])
  

# Expected output: note that `nb` is a character, not numeric!



  id cell nb
1:  1   k8  1
2:  2   k9  2
3:  3   w7  3
4:  4   w7  3
5:  5   k3  4

【问题讨论】:

    标签: r dplyr data.table


    【解决方案1】:

    你只需要反过来:

    dummy <- setNames( as.character(1:4), c('k8','k9','w7','k3'))
    dd[, nb := dummy[cell]]
    
    dd
    #    id cell nb
    # 1:  1   k8  1
    # 2:  2   k9  2
    # 3:  3   w7  3
    # 4:  4   w7  3
    # 5:  5   k3  4
    

    【讨论】:

      【解决方案2】:

      您可以使用on = 选项尝试以下data.table 选项

      > dd[stack(v1), nb := ind, on = .(cell = values)][]
         id cell nb
      1:  1   k8  1
      2:  2   k9  2
      3:  3   w7  3
      4:  4   w7  3
      5:  5   k3  4
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-19
        • 1970-01-01
        • 2018-10-07
        • 1970-01-01
        • 1970-01-01
        • 2014-05-02
        • 2020-05-15
        相关资源
        最近更新 更多