【发布时间】:2013-10-14 19:07:42
【问题描述】:
我在数据表中有一个包含NaN 值的列。比如:
my.dt <- data.table(x = c(NaN, NaN, NaN, .1, .2, .2, .3), y = c(2, 4, 6, 8, 10, 12, 14))
setkey(my.dt, x)
我可以使用J() 函数查找x 列等于.2 的所有实例
> my.dt[J(.2)]
x y
1: 0.2 10
2: 0.2 12
但如果我尝试对 NaN 做同样的事情,它就行不通了。
> my.dt[J(NaN)]
x y
1: NaN NA
我希望:
x y
1: NaN 2
2: NaN 4
3: NaN 6
什么给了?我在 data.table 文档中找不到任何东西来解释为什么会发生这种情况(尽管可能只是我不知道要寻找什么)。有什么办法可以得到我想要的吗?最终,我想将所有 NaN 值替换为零,使用类似 my.dt[J(NaN), x := 0]
【问题讨论】:
-
+1。很奇怪。当我运行
my.dt[J(NaN), x := 0]时,它会破坏密钥,但对data.table 中的值没有影响...要获得您想要的(某种),请使用my.dt[!J(unique(x)),x:=0]。不过,不要问我为什么会这样! -
@Frank 我看到了相同的结果/效果(或没有效果)。
-
你可以这样做
my.dt[is.nan(x),x:=0]。 -
@mrip 是的。我想目标是使用
J调用的任何快速魔法的基数类型,并保持一致性。但是你提出的是我在设置密钥之前会做的事情。有人可能会争辩说 NA 和 NaN 不是要获取的键的有效值... -
@Arun 感谢您的更新,并保持标签清洁。我已接受更新后的答案。
标签: r data.table