【发布时间】:2021-07-03 18:02:33
【问题描述】:
假设我有这个数据集
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
提前感谢您的回答!
【问题讨论】:
-
你是打算做
test[Y == 'a', .SD, keyby = .(X)]还是test[, .SD[Y == "a"], keyby = .(X)] -
不确定为什么要使用分组列对其进行子集化,因为分组列输出单个元素,而另一个 Y == 'a',返回 3,因此它被 NA 填充(除非你复制 X
-
这是越界索引的标准 R 行为。参见R Intro3.4.1 Indexing by vectors:“如果
i为正并超过length(x),则对应的选择为NA”,以及在每个组内,分组变量的长度为1(参见FAQ 2.10) -
确实如此。逻辑索引 (
i) 的长度为 3。每个组内的分组变量的长度为 1(x,您尝试索引的向量;再次参见常见问题解答):“如果i为正(是的,这里i是3)并且超过length(x)(是的,长度索引向量i是3,要索引的向量长度x是1)然后对应的选择是NA -
旁注:感谢您发布这么小的说明性玩具数据集!
标签: r data.table subset