我有两个数据表。其中一个有一些
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
行家,但请寻找.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