gpt4 book ai didi

r - 使用 .I 通过 data.table 包返回行号

转载 作者:行者123 更新时间:2023-12-03 07:01:14 26 4
gpt4 key购买 nike

有人可以向我解释一下 .I 返回 data.table 行号的正确用法吗?

我有这样的数据:

require(data.table)
DT <- data.table(X=c(5, 15, 20, 25, 30))
DT
# X
# 1: 5
# 2: 15
# 3: 20
# 4: 25
# 5: 30

我想返回一个行索引向量,其中 i 中的条件为 TRUE,例如哪些行的 X 大于 20。

DT[X > 20]
# rows 4 & 5 are greater than 20

为了获取索引,我尝试了:

DT[X > 20, .I]
# [1] 1 2

...但显然我做错了,因为这只是返回一个包含 1 到返回行数的向量。 (我认为这几乎就是 .N 的用途?)。

抱歉,如果这看起来非常基本,但我在 data.table 文档中找到的只是 .I.N 做什么,而不是如何做使用它们。

最佳答案

如果您想要的只是行号而不是行本身,请使用 which = TRUE不是 .I .

DT[X > 20, which = TRUE]
# [1] 4 5

这样您就可以获得 i 优化的好处,例如快速连接或使用自动索引。 which = TRUE使其提前返回,仅包含行号。

这是 which 的手动输入data.table 中的参数:

TRUE returns the row numbers of x that i matches to. If NA, returns the row numbers of i that have no match in x. By default FALSE and the rows in x that match are returned.

<小时/>

说明:

注意 .I 之间存在特定关系和 i = .. DT[i = .., j = .., by = ..] 中的参数即.I是子集表的行号向量。

### Lets create some sample data
set.seed(1)
LL <- sample(LETTERS[1:5], 20, TRUE)
DT <- data.table(X=LL)

看看对整个表进行子集化和仅对表进行子集化 .I 之间的区别

DT[X == "B", .I]
# [1] 1 2 3 4 5 6

DT[ , .I[X == "B"] ]
# [1] 1 2 5 11 14 19

关于r - 使用 .I 通过 data.table 包返回行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22408306/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com