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

Posted

技术标签:

【中文标题】如何在 data.table 中返回行数和行数?【英文标题】:How to return the row/s along with the row number/s in data.table? 【发布时间】:2019-02-06 08:09:25 【问题描述】:

我正在尝试根据条件对 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

它以不同的方式返回行号(即1 & 2)。

我想要达到的目的是看起来像这样,

      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】:

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

【讨论】:

建议使用copy作为虹膜以避免覆盖它。当然可以恢复,但最好复制。 @NelsonGon 不知道你在说什么。 data.table()setDT() 不同。

以上是关于如何在 data.table 中返回行数和行数?的主要内容,如果未能解决你的问题,请参考以下文章

HEVC平铺中VR视频的列数和行数

响应式布局中的动态列数和行数

在Java中,如何通过在数据库得到的结果集得到表的列数和行数?

计算条件下的总行数和行数

栅格数据的列数和行数很大怎么回事

POI获取Excel列数和行数的方法