Замена NA в одном столбце с именем Dynami c - PullRequest
0 голосов
/ 18 апреля 2020

Я получил столбец в таблице данных, из которого я хотел бы заменить NA на 0. Однако имя этого столбца - Dynami c, что означает, что он хранится в переменной (назовем это x). Как «выбрать» этот столбец с именем, хранящимся в переменной x, и заменить все его NA на 0?

Я пытался безуспешно:

DT[, get(x) := ifelse(is.na(get(x)), 0, get(x))]
DT[, .(x) := ifelse(is.na(.(x)), 0, .(x))]
DT[, x, with = FALSE][is.na(DT[, x, with = FALSE])] <- 0

Ответы [ 2 ]

2 голосов
/ 18 апреля 2020

Вы можете использовать:

library(data.table)
DT[is.na(get(x)), (x) := 0]
DT

#   a b
#1: 0 1
#2: 2 2
#3: 4 3
#4: 0 4
#5: 1 5

Другие опции включают в себя:

DT[, (x) := replace(get(x), is.na(get(x)), 0)]

Или

DT[, (x) := ifelse(is.na(get(x)), 0, get(x))]

данные

DT <- data.frame(a = c(NA, 2, 4, NA, 1), b = 1:5)
setDT(DT)
x <- 'a'
0 голосов
/ 18 апреля 2020

При data.table правильным подходом будет указать переменные в .SDcols

library(data.table)
DT[, (x) := fifelse(is.na(.SD[[1]]), 0, .SD[[1]]), .SDcols = x]

. Или другой вариант - преобразовать в symbol, а затем eval uate

*. 1009 *

Или используйте i, который является наиболее эффективным подходом

DT[is.na(eval(as.symbol(x))), (x) := 0]

data

DT <- data.frame(a = c(NA, 2, 4, NA, 1), b = 1:5)
setDT(DT)
x <- 'a'
...