如何用另一个数据表中的值替换 data.table 中的 NA 值

问题描述 投票:0回答:1

我有两个数据表。其中一个有一些

NA
值,我想将其替换为第二个 data.table 的同一位置(行/列)的值。

我可以分别为每一列做。有没有办法一次性完成所有列?

代表:

x <- data.table(
  a = runif(10),
  b = runif(10)
)

x[3, a := NA]
x[7, a := NA]
x[5, b := NA]

y <- data.table(
  a = runif(10)*100,
  b = runif(10)*100
)

# this works but I have to go row by row
x[is.na(a), a := y[is.na(x$a), a]]
x[is.na(b), b := y[is.na(x$b), b]]


# this also works but I'm not sure is the best way
for (i in seq_along(x)) {
  x[[i]] <- ifelse(is.na(x[[i]]), y[[i]], x[[i]])
}


data.table
1个回答
0
投票

这里绝对不是

data.table
行家,但请寻找
.SD
.SDcols
论据

这是一种替代方案:

set.seed(10) # For `x` and `y` 

z <- y * is.na(x) + x[ , lapply(.SD, replace_na, 0)]

输出:

> z
              a           b
          <num>       <num>
 1:  0.50747820  0.65165567
 2:  0.30676851  0.56773775
 3: 77.51098964  0.11350898
 4:  0.69310208  0.59592531
 5:  0.08513597 42.26376070
 6:  0.22543662  0.42880942
 7: 83.82876653  0.05190332
 8:  0.27230507  0.26417767
 9:  0.61582931  0.39879073
10:  0.42967153  0.83613414
© www.soinside.com 2019 - 2024. All rights reserved.