我只是在学习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个变量
我不明白为什么z1
与z2a
不同。谁能解释?
答案 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中使用:=时,我充当条件而不是子集。