У меня есть data.table
library(data.table)
DT <- data.table(
signal = c(1, -1, -5),
draw_1 = c(NA, 3, NA),
draw_2 = c(NA, NA, 2)
)
> DT
signal draw_1 draw_2
1: 1 NA NA
2: -1 3 NA
3: -5 NA 2
И я хотел бы заменить значения столбцов draw_*
, где:
signal
меньше 0 - Столбец
draw_*
имеет значение NA
Итак, желаемый результат:
> desired
signal draw_1 draw_2
1: 1 NA NA
2: -1 3 50
3: -5 50 2
Я попробовал тот же подход, который обычно использую для присвоения значений группам столбцов за раз:
draws <- c("draw_1", "draw_2")
replacement <- 50
DT[,(draws) := ifelse( is.na(.SD) & signal<0, replacement, .SD), .SDcols=draws]
Но это приводит к ошибке,
Error in `[.data.table`(DT, , `:=`((draws), ifelse(is.na(.SD) & signal < :
Supplied 2 columns to be assigned 6 items. Please see NEWS for v1.12.2.
Я не понимаю, что здесь происходит не так. Я подозреваю, что это связано с использованием signal
, столбец за пределами .SDcols
. Если то, что я делаю, невозможно, есть ли лучший способ достичь sh моей цели?