Скажем, у меня есть следующий упрощенный набор данных:
dt <- data.table(id = 1:5, val = c(1, 2, 3, 2, 4))
dt2 <- data.table(id = c(2, 4), val = c(2, 3))
Я хочу заменить все значения в dt
, которые имеют значение 2. Значение замены указано в dt2.Две таблицы могут быть объединены через идентификатор.Конечное значение должно оставаться неизменным, если значение не равно 2. И если оно равно 2, оно должно стать paste0(dt$val, ".", dt2$val)
.
Желаемый результат:
row id val
1: 1 1
2: 2 2.2
3: 3 3
4: 4 2.3
5: 5 4
Что я пробовал (работает, но не выглядит элегантно):
merged <- merge(x = dt, y = dt2, by= "id", all.x = TRUE)
merged[!is.na(merged$val.y), ]$val.x <- paste0(
merged[!is.na(merged$val.y), ]$val.x, ".",
merged[!is.na(merged$val.y), ]$val.y)
merged[, val.y := NULL]
setnames(x = merged, old = "val.x", new = "val")
merged
Вопрос: Как я могу сделать преобразование более элегантно?