【问题标题】:R data.table - row subsetting behavior - NA values [duplicate]R data.table - 行子集行为 - NA值[重复]
【发布时间】:2017-04-30 04:35:19
【问题描述】:

我注意到 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 <- 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

有什么特殊原因吗?

谢谢

【问题讨论】:

标签: r data.table subset na


【解决方案1】:

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

整数和逻辑向量的工作方式与它们在 [.data.frame 中的工作方式相同,但逻辑 NA 被视为 FALSE。

在data.frame 中,NA 被视为 NA。

【讨论】:

  • 好的,谢谢。如果您遇到任何关于它的讨论,请分享。
  • 似乎data.framealways 带来了 NA 行; data.table 从不带来。由于 NA 可以解释为“无信息”,因此可以有多种处理方式。两者对我来说似乎有点不一致。在data.frame 中,当我使用COL1 != 1 进行子集化时,它会排除已知值为1 的行并保留所有其他行。但是,当我使用 COL1 == 1 进行子集化时,它会为我带来值为 1 的行和值未知为 1 的行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-23
  • 2021-12-05
  • 2017-03-11
  • 1970-01-01
相关资源
最近更新 更多