我试图根据条件对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
。
答案 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