data.table/data.frame rbind不能正常工作

abh*_*eor 3 r dataframe rbind data.table

我正在使用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
Run Code Online (Sandbox Code Playgroud)

本质上只是rbindis.na()!is.na()给了我优秀成果,但只要我尝试更换NA其他的列值列值rbind(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
Run Code Online (Sandbox Code Playgroud)

因此,即使我将其转换为后,这也不起作用data.frame.

Hub*_*rtL 5

问题是您使用:=条件更新就地更新,但返回忽略条件的整个数据集.

使用此语法不能就地更新:

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
Run Code Online (Sandbox Code Playgroud)

或者这只是就地更新

df[is.na(a),b := a]
df
    a  b
1: NA NA
2: NA NA
3:  2  2
4:  2  2
Run Code Online (Sandbox Code Playgroud)

  • 我会选择`rbind(df [is.na(a)] [,b:= a],df [!is.na(a)])` (3认同)