在 R 中将 setkey 与 data.table 一起使用时,是否可以包含 >=, <= 运算符?



我正在寻找此简短的tuto for data.table

https://www.r-bloggers.com/r-data-table-tutorial-with-50-examples/

但是当作者谈论setkey()

时,我会卡住

我将举一个例子。我使用虹膜数据库,因此可以轻松复制

mydata <- as.data.table(iris)
#Change variable names
mydata <- setnames(mydata, c("Sepal.Length","Sepal.Width", "Petal.Length", "Petal.Width", "Species"), 
c("sepal_length", "sepal_width", "petal_length", "petal_width", "species"))

现在,我将使用一个因子变量和数字变量作为键:

setkey(mydata, species, petal_length)

使用此功能非常完美:

> mydata[.("setosa", 1.4)]
    sepal_length sepal_width petal_length petal_width species
 1:          5.1         3.5          1.4         0.2  setosa
 2:          4.9         3.0          1.4         0.2  setosa
 3:          5.0         3.6          1.4         0.2  setosa
 4:          4.6         3.4          1.4         0.3  setosa
 5:          4.4         2.9          1.4         0.2  setosa
 6:          4.8         3.0          1.4         0.1  setosa
 7:          5.1         3.5          1.4         0.3  setosa
 8:          5.2         3.4          1.4         0.2  setosa
 9:          5.5         4.2          1.4         0.2  setosa
10:          4.9         3.6          1.4         0.1  setosa
11:          4.8         3.0          1.4         0.3  setosa
12:          4.6         3.2          1.4         0.2  setosa
13:          5.0         3.3          1.4         0.2  setosa

但这引发了一个错误:

mydata[.("setosa", <1.4)]
Error: inesperado '<' in "mydata[.("setosa", <"

所以我的问题是,在使用setkey搜索时,是否可以包括>,&lt;,> =,&lt; =,因为该函数应该在任何类型的变量上使用。如果是的,那么调用诸如mydata[.("setosa", <1.4)]

之类的东西将是什么正确的形式

我看着:

r data.table setKey带数字列

r data.table 1.9.2 SetKey上的问题

,但发现没有用来回答我的问题。

我还阅读了data.table文档,但没有有用的示例。

任何评论都将不胜感激。

看起来像是您正在子集而不是提取相同的匹配项。下面的感觉更像天然语法

mydata[species=="setosa" & petal_length < 1.4]

或非equi像这样的加入

mydata[.(species="setosa", i.petal_length=1.4), on=.(species, petal_length < i.petal_length)]

我发现使用seq函数很有用。

假设我想检索petal_length在1.4到2之间的setosa的观测值。

按照我最初的问题中的示例,我们可以使用:

na.omit(mydata[.("setosa", seq(1.4,2, 0.1))])

返回我们想要的观察结果。

seq(1.4, 2, 0.1) 

将序列从1.4返回2 x 0.1步。这查找数据中的值。表并生成1.6、1.8和1.9的观察值。这就是为什么所谓的第一个功能是na.omit

希望这对某人有用。

最新更新