首页 > 解决方案 > data.table:用 keyby 对 j 中的分组变量进行子集化

问题描述

说我有这个数据集

test <- data.table(X = rep(1, 3), Y = rep("a", 3))

这给了我们

test
#   X Y
#1: 1 a
#2: 1 a
#3: 1 a

我想知道为什么

test[, X[Y == "a"], keyby = .(X)]

#   X V1
#1: 1  1
#2: 1 NA
#3: 1 NA

预先感谢您的回答!

标签: rdata.tablesubset

解决方案


如果你单独X运行Y=="a"

> test[, X, keyby = .(X)]
   X X
1: 1 1

> test[, Y == "a", keyby = .(X)]
   X   V1
1: 1 TRUE
2: 1 TRUE
3: 1 TRUE

你会看到,第一个给出1长度为 1 的数值,第二个给出TRUE长度为 3 的逻辑值。

由于您没有匹配的子集长度,您将获得NAs 来填写相应的位置,例如,

> 1[rep(TRUE,3)]
[1]  1 NA NA

推荐阅读