从子集化data.table中检索特定值

时间:2012-11-30 15:59:50

标签: r data.table

我在R中有一个data.table

my.dt <- data.table(x=seq(1:5),y=(c(TRUE, TRUE, FALSE, FALSE, FALSE)))

我想从中提取单个值或值向量:

boolean.vector <- my.dt[x<4,"y",with=FALSE]
boolean.value <- my.dt[x<2,"y",with=FALSE]

但是,这些返回值仍为data.table类。因此,我不能,例如,做以下事情:

> if(boolean.value) { print("Hello") }
Erro em if (boolean.value) { : argumento não é interpretável como lógico
# (Error in if (boolean.value) { : argument cannot be interpreted as logical)

如何检索原始值以便以这种方式使用它们?

2 个答案:

答案 0 :(得分:3)

而不是

my.dt[1:3,"y",with=FALSE]

我会做的

my.dt$y[1:3]

my.dt[["y"]][1:3]

my.dt[x<2,"y",with=FALSE][[1]]

在基础R [[中不复制向量(它是复制时的复制),因此这非常有效,并且不需要使用data.table语法。

答案 1 :(得分:2)

您可以使用unlist函数将输出转换为布尔矢量:

unlist(boolean.value)
   y 
TRUE 

unlist(boolean.vector)
   y1    y2    y3 
 TRUE  TRUE FALSE