首页 > 解决方案 > 用动态名称替换一列中的 NA

问题描述

我在数据表中有一个列,我想用 0 替换 NA。但是,该列的名称是动态的,这意味着它存储在一个变量中(我们称之为 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

标签: rdata.tablena

解决方案


您可以使用 :

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'

推荐阅读