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
本质上只是 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
所以即使我将它转换为 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
我正在使用 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
本质上只是 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
所以即使我将它转换为 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