data.table/data.frame rbind 无法正常工作

data.table/data.frame rbind not working fine

我正在使用 data.table 1.9.6。这是一些简单的代码和输出:

df <- data.table(a=c(NA,NA,2,2),b=c(1,1,2,2))
nrow(df[is.na(a)]) + nrow(df[!is.na(a)])
# [1] 4
nrow(rbind(df[is.na(a)],df[!is.na(a)]))
# [1] 4
nrow(rbind(df[is.na(a),b := a],df[!is.na(a)]))
# [1] 6
rbind(df[is.na(a),b := a],df[!is.na(a)])
#     a  b
# 1: NA NA
# 2: NA NA
# 3:  2  2
# 4:  2  2
# 5:  2  2
# 6:  2  2
rbind(df[is.na(a),a := b],df[!is.na(a)])
#     a  b
# 1: NA NA
# 2: NA NA
# 3:  2  2
# 4:  2  2
# 5:  2  2
# 6:  2  2

本质上只是 rbindis.na()!is.na() 之后给了我很好的结果但是一旦我尝试用其他列值替换列中的 NArbind(df[is.na(a),a := b],df[!is.na(a)]) 东西坏了。相当不合逻辑 rbind(df[is.na(a),b := a],df[!is.na(a)]) 也会中断。谁能解释我遗漏了什么或者这是一个错误?

为了让事情继续进行,我尝试了:

rbind(data.frame(df[is.na(a),a := b]),data.frame(df[!is.na(a)]))
#    a  b
# 1 NA NA
# 2 NA NA
# 3  2  2
# 4  2  2
# 5  2  2
# 6  2  2

所以即使我将它转换为 data.frame 后它也不起作用。

问题是您使用 := 更新条件,但 returns 整个数据集忽略条件。

要么使用此语法不就地更新:

rbind(df[is.na(a),.(a,b = a)],df[!is.na(a)])
    a  b
1: NA NA
2: NA NA
3:  2  2
4:  2  2

或仅就地更新

df[is.na(a),b := a]
df
    a  b
1: NA NA
2: NA NA
3:  2  2
4:  2  2