R 用动态名称替换一列中的NAs

R 用动态名称替换一列中的NAs,r,data.table,na,R,Data.table,Na,我在数据表中得到了一列,我想从中用0s替换NAs。但是,该列的名称是动态的,这意味着它存储在一个变量中(我们称之为x)。如何“选择”一列及其名称存储在变量x中,并将其所有NAs替换为0s 我尝试过,但没有成功: 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])]

我在数据表中得到了一列,我想从中用0s替换NAs。但是,该列的名称是动态的,这意味着它存储在一个变量中(我们称之为x)。如何“选择”一列及其名称存储在变量x中,并将其所有NAs替换为0s

我尝试过,但没有成功:

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
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])]您可以使用:

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 <- data.frame(a = c(NA, 2, 4, NA, 1), b = 1:5)
setDT(DT)
x <- 'a'
DT <- data.frame(a = c(NA, 2, 4, NA, 1), b = 1:5)
setDT(DT)
x <- 'a'
DT您可以使用:

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 <- data.frame(a = c(NA, 2, 4, NA, 1), b = 1:5)
setDT(DT)
x <- 'a'
DT <- data.frame(a = c(NA, 2, 4, NA, 1), b = 1:5)
setDT(DT)
x <- 'a'

DT对于
data.table
,正确的方法是在
.SDcols

library(data.table)
DT[, (x) := fifelse(is.na(.SD[[1]]), 0, .SD[[1]]), .SDcols = x]
或者另一个选项是转换为
symbol
,然后
eval
uate

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

或者使用
i
,这是最有效的方法

DT[is.na(eval(as.symbol(x))), (x) := 0]
数据
DT对于
data.table
,正确的方法是在
.SDcols

library(data.table)
DT[, (x) := fifelse(is.na(.SD[[1]]), 0, .SD[[1]]), .SDcols = x]
或者另一个选项是转换为
symbol
,然后
eval
uate

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

或者使用
i
,这是最有效的方法

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