【发布时间】:2016-12-06 19:25:50
【问题描述】:
dt = data.table(x = c(1,1,2,2,2,2,3,3,3,3))
dt[, y := if(.N > 2) .N else NA, by = x] # fail
dt[, y := if(.N > 2) .N else NA_integer_, by = x] # good
第一次分组失败,因为NA 有一个类型并且它不是整数。有没有办法告诉数据表忽略它并尝试将所有 NA 设置为保持一致性的任何类型?
我可以在这里手动设置NA_integer,但是如果我有很多不同类型的列,很难设置所有的NA类型正确。
顺便说一句,我应该为 Date/IDate/ITime 使用哪种 NA 类型?
【问题讨论】:
-
@RichardScriven 我确定第二个有效。你在使用 RStudio 吗?成功执行新命令时,RStuidio 有时会一直提示先前的错误消息。
-
@RichardScriven 哦,我明白了。不要按顺序执行这两个。失败的命令实际上改变了表
-
你的“x”列不是一个“整数”——我猜是因为
.N需要“整数”,所以,使用.N作为返回值,你可以硬编码@ 987654326@ 用于不同的typeofs。在其他情况下,将返回值的storage.mode(此处为NA)设置为适当的类型。
标签: r data.table na