R数据表-行子集行为-NA值

R数据表-行子集行为-NA值,r,data.table,subset,na,R,Data.table,Subset,Na,我注意到data.frame和data.table行子集在NA值方面有所不同 清洁代码: DF <- data.frame(COL1 = c(1, 2, NA)) DF[DF$COL1 == 1, ] DF[DF$COL1 != 1, ] DT <- data.table::data.table(COL1 = c(1, 2, NA)) DT[COL1 == 1, ] DT[COL1 != 1, ] DF[DF$COL1!=1,] [1] 2 NA >DT DT[COL1==1,

我注意到
data.frame
data.table
行子集在NA值方面有所不同

清洁代码:

DF <- data.frame(COL1 = c(1, 2, NA))

DF[DF$COL1 == 1, ]
DF[DF$COL1 != 1, ]

DT <- data.table::data.table(COL1 = c(1, 2, NA))
DT[COL1 == 1, ]
DT[COL1 != 1, ]
DF[DF$COL1!=1,]
[1] 2 NA
>DT DT[COL1==1,]
可乐
1:    1
>DT[COL1!=1,]
可乐
1:    2
有什么特别的原因吗


感谢来自帮助文件
?data.table
,在
i
的讨论下:

整数和逻辑向量的工作方式与[.data.frame]中的工作方式相同,但逻辑NAs被视为FALSE


data.frame
中,NAs被视为NA。

不,只是不同的处理方式除了dupe链接,这里还有更多的讨论:哦,谢谢。很抱歉复制。好的,谢谢。如果你遇到任何关于它的讨论,请分享。似乎
data.frame
总是带来NA行;
data.table
nev呃,因为NA可以解释为“没有信息”,可以有很多方法来处理它。这两种方法对我来说似乎有点不一致。在
data.frame
中,当我使用
COL1!=1
子集时,它会排除已知值为1的行,并保留所有其他行。然而,当我使用
COL1==1
子集时,它会给我带来值为1的行和值未知的行1或不是。
> DF <- data.frame(COL1 = c(1, 2, NA))
> DF[DF$COL1 == 1, ]
[1]  1 NA
> DF[DF$COL1 != 1, ]
[1]  2 NA
> DT <- data.table::data.table(COL1 = c(1, 2, NA))
> DT[COL1 == 1, ]
   COL1
1:    1
> DT[COL1 != 1, ]
   COL1
1:    2