R:重分类许多 类 data.table 的命名向量
R: Named vector to reclassify many classes data.table
我需要重新分类 data.table
中的值,例如创建一个新列。我有 30 多个 类 需要重新分类,每个使用 .csv 数据集 >3GB,因此我正在寻找一种高效的工具,它也足够容易阅读。我想知道是否有比 case_when
更好的东西,并尝试根据答案 .
使用 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
你只需要反过来:
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
我需要重新分类 data.table
中的值,例如创建一个新列。我有 30 多个 类 需要重新分类,每个使用 .csv 数据集 >3GB,因此我正在寻找一种高效的工具,它也足够容易阅读。我想知道是否有比 case_when
更好的东西,并尝试根据答案
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
你只需要反过来:
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