如何在data.table中返回行和行号?

时间:2019-02-06 08:09:26

标签: r data.table

我试图根据条件对data.table进行子集化,但我也想从data.table中获取其原始行号。我读到的here是,您只需要将which设置为TRUE,但是它只返回实际的行号而不是整行。

Boston[medv == min(medv), which=TRUE],这将返回[1] 399 406,表示这些行满足条件。

如果which未设置为TRUE,即Boston[medv == min(medv)],则返回

      crim zn indus chas   nox    rm age    dis rad tax ptratio  black lstat medv
1: 38.3518  0  18.1    0 0.693 5.453 100 1.4896  24 666    20.2 396.90 30.59    5
2: 67.9208  0  18.1    0 0.693 5.683 100 1.4254  24 666    20.2 384.97 22.98    5

,它以不同的方式返回行号(即12)。

我想要达到的目标是这样,

      crim zn indus chas   nox    rm age    dis rad tax ptratio  black lstat medv
399: 38.3518  0  18.1    0 0.693 5.453 100 1.4896  24 666    20.2 396.90 30.59    5
406: 67.9208  0  18.1    0 0.693 5.683 100 1.4254  24 666    20.2 384.97 22.98    5

其中行号为309406

1 个答案:

答案 0 :(得分:1)

data.table不使用行名,因此我不认为您要实现的目标 是可能的。取而代之的是,您可以创建一个新列,将原来的行ID隐藏起来。

irisDT <- data.table(iris)
irisDT[, rowid := .I][Sepal.Width == 3.5]


   Sepal.Length Sepal.Width Petal.Length Petal.Width Species rowid
1:          5.1         3.5          1.4         0.2  setosa     1
2:          5.1         3.5          1.4         0.3  setosa    18
3:          5.2         3.5          1.5         0.2  setosa    28
4:          5.5         3.5          1.3         0.2  setosa    37
5:          5.0         3.5          1.3         0.3  setosa    41
6:          5.0         3.5          1.6         0.6  setosa    44