Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R data.table:使用keyby在j中设置分组变量_R_Data.table_Subset - Fatal编程技术网

R data.table:使用keyby在j中设置分组变量

R data.table:使用keyby在j中设置分组变量,r,data.table,subset,R,Data.table,Subset,假设我有这个数据集 test <- data.table(X = rep(1, 3), Y = rep("a", 3)) 我想知道为什么 test[, X[Y == "a"], keyby = .(X)] 给予 提前感谢您的回答 它在uniqueN中返回2,因为有两个值-1)“X”分组值1和NA填充。我们可以在uniqueN中使用na.rm=TRUE test[, uniqueN(X[Y == "a"], na.rm = T

假设我有这个数据集

test <- data.table(X = rep(1, 3), Y = rep("a", 3))
我想知道为什么

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


提前感谢您的回答

它在
uniqueN
中返回
2
,因为有两个值-1)“X”分组值1和
NA
填充。我们可以在
uniqueN
中使用
na.rm=TRUE

test[, uniqueN(X[Y == "a"],  na.rm = TRUE), keyby = .(X)]
#   X V1
#1: 1  1
如@ThomasIsCoding post中所述,逻辑向量和分组变量(返回长度1)的
length
之间的
length
不匹配会导致使用NA填充额外的真位置。一个选项是
rep
licate

test[, rep(X, .N)[Y == "a"], keyby = .(X)]
#   X V1
#1: 1  1
#2: 1  1
#3: 1  1

如果分别运行
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
,第二个给出长度为3的逻辑值
TRUE

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

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

嗯,从某种程度上说,这很复杂

它与分组中的
X
有关

考虑这些变化:

描述 表达 你的 测试[,
X[Y==“a”]
,keyby=(X)] X仅限 测试[,
X
,keyby=(X)] Y==仅限“a” 测试[,
Y==“a”
,keyby=(X)]
您是否打算执行
test[Y=='a',.SD,keyby=.(X)]
test[,.SD[Y=='a'],keyby=.(X)]
不确定为什么要使用分组列对其进行子集划分,因为分组列输出单个元素,而另一个Y=='a'返回3,因此它被NA填充(除非复制XIt用于越界索引的标准R行为。请参阅:“如果
i
为正且超过
length(x)
,则相应的选择为
NA
”,并且在每个组中,分组变量的长度实际上为1(请参阅)。逻辑索引的长度(
i
)是3。每个组中分组变量的长度是1(
x
,您尝试索引的向量;再次,请参阅常见问题解答):“如果
i
是正的(是,这里
i
是3)并且超过
length(x)
(是的,长度索引向量
i
是3,要索引的向量长度
x
是1)然后相应的选择是
NA
侧注:感谢您发布如此小的说明性玩具数据集!
> 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[rep(TRUE,3)]
[1]  1 NA NA