【发布时间】: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