Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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中的变量名在i中创建子集_R_Data.table - Fatal编程技术网

R 通过data.table中的变量名在i中创建子集

R 通过data.table中的变量名在i中创建子集,r,data.table,R,Data.table,假设我有一个data.table,其列名称在变量中指定。例如,我可能使用了dcast作为: groups <- sample(LETTERS, 2) # i.e. I don't now the values dt1 <- data.table(ID = rep(1:2, each = 2), group = groups, value = 3:6) (dt2 <- dcast(dt1, ID~group, value.var = "value")) # ID D Q #

假设我有一个data.table,其列名称在变量中指定。例如,我可能使用了
dcast
作为:

groups <- sample(LETTERS, 2) # i.e. I don't now the values
dt1 <- data.table(ID = rep(1:2, each = 2), group = groups, value = 3:6)
(dt2 <- dcast(dt1, ID~group, value.var = "value"))
#    ID D Q
# 1:  1 3 4
# 2:  2 5 6
有简单的方法吗? 我发现我可以用钥匙做到这一点:

setkeyv(dt2, groups)
dt2[.(3, 4)]
#    ID D Q
# 1:  1 3 4
但我该如何做更详细的事情呢

dt2[groups[1] > 3 & groups[2] < 7]
dt2[组[1]>3和组[2]<7]

您可以使用
get
to(from
?get

按名称搜索对象

:


我们可以将
eval
as.name
一起使用,它应该比
get

dt2[eval(as.name(groups[1])) > 2 & eval(as.name(groups[2])) == 4]
#   ID L U
#1:  1 4 3

是的,这很有道理,谢谢!@Max感谢您的更新删除了我的postBest,请在制作随机示例之前使用
set.seed
。正如你在答案中所看到的,他们无法重现你的例子。。。(改为A、J栏)。@Frank大体上我同意,但在这种情况下这并不重要。一个随机的例子用来强调我事先不知道变量名。@akrun有一种感觉,它不是重复的。我们现在(从1.9.7开始)有了非等联接,OP可以在这里使用非等联接来过滤条件,如
groups[1]>3和groups[2]<7
,语法如
dt2[(3,7),on=(D>V1,Q<7)]
,利用二进制搜索。然而,我认为,即使使用链接中包含的方法,也无法动态地将名称D和Q传递给
on=
。@akrun当然,我对投票的“正确”使用没有什么可说的。如果你被联合起来或以其他方式作为目标,把它交给mods。@akrun好吧,mods有权将问题上报给工作人员注意,我想他们可以看到这样的事情。无论如何,我们没有理由在Max的问题下讨论这个。
dt2[get(groups[1]) > 2 & get(groups[2]) == 4]
#   ID A J
#1:  1 3 4
dt2[eval(as.name(groups[1])) > 2 & eval(as.name(groups[2])) == 4]
#   ID L U
#1:  1 4 3