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)
本质上只是rbind
后is.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
.
问题是您使用:=
条件更新就地更新,但返回忽略条件的整个数据集.
使用此语法不能就地更新:
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)