data.table子集产生意外结果

时间:2019-02-01 00:01:09

标签: r data.table

我只是在学习R和data.table,不知道为什么这个子集会产生不同的结果?

看看这段代码:

x <- c("a",NA,"b","C","d")
y <- c(1,2,3,4,5)

z <- data.table(x,y)

z1 <- z[is.na(x), q := 2*y]


z2 <- z[, q:= 2*y]

z2a <- z2[is.na(x),]

z1对3个变量有5个观察值。 z2a具有1个观测值3个变量

我不明白为什么z1z2a不同。谁能解释?

1 个答案:

答案 0 :(得分:0)

因为您还没有将其过滤到仅一行。您使用[is.na(x),q:= 2 * y]的意思是,“对于x为NA的行,更新列q中的值” – SymbolixAU

这是票证,加上有关检查小插图(https://cran.r-project.org/web/packages/data.table/vignettes/datatable-reference-semantics.html)的注释

基本上,当您在j中使用:=时,我充当条件而不是子集。