R:重分类许多 类 data.table 的命名向量

R: Named vector to reclassify many classes data.table

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

使用 named vector

但是,我有两个问题:

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

 # 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

你只需要反过来:

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

您可以使用 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