Это возникло раньше, чем я уверен, но я не могу найти проблему или сообщение SO. Кто-нибудь помнит или пожалуйста ссылки? Кажется, я помню, как я отвечал кому-то что-то вроде « .I
предназначено для использования в группировке согласно документации, но было бы неплохо расширить его и на отсутствие группировки». На странице руководства по-прежнему есть слова «при группировке» для .I
.
Текущее поведение как в v1.10.4-3, так и в dev:
> X = data.table(c("a","a","b","c","c"), 10:14)
> setkey(X,V1)
> X["b"]
V1 V2
1: b 12 # ok
> X["b", .I]
[1] 1 # expected x's row number 3 (*1)
> X["b", .I, by=.EACHI]
V1 I
1: b 3 # ok
> X["b", .(.I,V2)]
I V2
1: 1 12 # expected x's row number 3 not 1 (*2)
> X["b", .(.I,V2), by=.EACHI]
V1 I V2
1: b 3 12 # ok
>
Теперь which=TRUE
был предназначен и работает для первого случая (* 1):
> X["b", which=TRUE]
[1] 3
но включение номеров строк x внутри j
( 2) в настоящее время невозможно, если вы не добавите номера строк x явно в качестве столбца. which=TRUE
аргумента .I
первый.
Кто-нибудь помнит или пожалуйста ссылки?
Вероятно, то, что вы ищете: https://stackoverflow.com/a/34755995/ и https://github.com/Rdatatable/data.table/issues/1494 Хотя заголовок должен быть ".I in DT [i, .I] должен возвращать номера строк DT, а не DT [i] "(без by), поскольку он уже имеет такое поведение, когда by = присутствует ...?
Еще вопрос о .I и by = https://github.com/Rdatatable/data.table/issues/1206
Можем ли мы использовать .I для глобального номера строки без группировки и .i для локального, то есть только внутри группировки?
@dracodoc, как упомянул Фрэнк, это # 1206
Извините, я не понял, что на эту идею есть целая ветка! Значит, это хорошая идея?
пример из https://github.com/Rdatatable/data.table/issues/539
dt <- data.table(a=sample(letters, 100, T), b=rnorm(100))
dt[ a=="c", list(.N, .I)]
N .I
1: 4 1
2: 4 2
3: 4 3
4: 4 4
dt[a=="c", list(.N, .I), by=a]
a N .I
1: c 4 54
2: c 4 67
3: c 4 71
4: c 4 86
Самый полезный комментарий
Извините, я не понял, что на эту идею есть целая ветка! Значит, это хорошая идея?