如何在 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
其中行号是309
和406
。
【问题讨论】:
【参考方案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 中返回行数和行数?的主要内容,如果未能解决你的问题,请参考以下文章