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