替代data.table中的plyr :: mapvalues

问题描述 投票:0回答:1

我正在寻找plyr::mapvaluesdata.table的易于理解的替代方法。

例如,在plyr::mapvalues中,如果我想将carb中的mtcars的值更改为type1, type2, type3-我将执行以下操作:

library(tidyverse)

mtcars %>% 
  mutate(carb = plyr::mapvalues(
    carb,
    from = c("1", "2", "3", "4", "6", "8"),
    to = c("type1", "type1", "type2", "type2", "type3", "type3")))

但是,如果我想在data.table中执行相同的操作,则需要这样做:

library(data.table)

dt <- data.table(mtcars)
dt$carb <- as.character(dt$carb)

dt[which(carb %in% c("1", "2")), 
   carb := "type1"]

dt[which(carb %in% c("3", "4")), 
   carb := "type2"]

dt[which(carb %in% c("6", "8")), 
   carb := "type3"]

是否可以在一种情况下更改所有值?

r data.table plyr
1个回答
0
投票

如何使用match

dt[, carb := rep(paste0("Type", 1:3), each = 2)[match(carb, c("1","2","3","4","6","8"))]]
#    mpg cyl  disp  hp drat    wt  qsec vs am gear  carb
#1: 21.0   6 160.0 110 3.90 2.620 16.46  0  1    4 Type2
#2: 21.0   6 160.0 110 3.90 2.875 17.02  0  1    4 Type2
#3: 22.8   4 108.0  93 3.85 2.320 18.61  1  1    4 Type1
#4: 21.4   6 258.0 110 3.08 3.215 19.44  1  0    3 Type1
#5: 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3 Type1
#6: 18.1   6 225.0 105 2.76 3.460 20.22  1  0    3 Type1
#7: 14.3   8 360.0 245 3.21 3.570 15.84  0  0    3 Type2
#8: 24.4   4 146.7  62 3.69 3.190 20.00  1  0    4 Type1
#9: 22.8   4 140.8  95 3.92 3.150 22.90  1  0    4 Type1
#10: 19.2   6 167.6 123 3.92 3.440 18.30  1  0    4 Type2
#...
© www.soinside.com 2019 - 2024. All rights reserved.