Если я правильно понял ваш вопрос, то вы можете попробовать двухэтапный процесс.
Вместо медленного выполнения ifelse
вы можете сначала создать новый столбец new_col
, если col1
имеет -
, назначивминус числового значения col1
после удаления -
из col1
.Затем замените значение NA
в new_col
числовым значением col1
.
library(data.table)
DT[grepl("-", col1),
new_col := - as.numeric(gsub("-", "", col1))][is.na(new_col), new_col := as.numeric(col1)]
, что дает
> DT
col1 id new_col
1: -123 1 -123
2: 1233- 2 -1233
3: 45 3 45
Пример данных:
DT <- data.table(col1 = c("-123","1233-", "45"),
id = c(1,2,3))
# col1 id
#1: -123 1
#2: 1233- 2
#3: 45 3