Подтвердить что ты не робот

Простые таблицы частот с использованием data.table

Я ищу способ сделать простые агрегаты/счеты через data.table.

Рассмотрим данные диафрагмы, которая имеет 50 наблюдений на каждого вида. Чтобы подсчитать наблюдения для каждого вида, я должен содержать сводки по столбцу, отличному от вида, например "Sepal.Length".

library(data.table)
dt = as.data.table(iris)
dt[,length(Sepal.Length), Species]

Мне кажется, что это сбивает с толку, потому что похоже, что я делаю что-то на Sepal.Length на первый взгляд, когда на самом деле это зависит только от видов.

Это то, что я хотел бы сказать, но я не получаю действительный вывод:

dt[,length(Species), Species]

Корректный ввод и вывод, но неуклюжий код:

> dt[,length(Sepal.Length), Species]
Species V1
1:     setosa 50
2: versicolor 50
3:  virginica 50

Неверный ввод и вывод, но более удобный код:

> dt[,length(Species), Species]
Species V1
1:     setosa  1
2: versicolor  1
3:  virginica  1

Есть ли элегантный способ?

4b9b3361

Ответ 1

data.table имеет пару символов, которые могут использоваться в выражении j. Примечательно

  • .N даст вам количество строк в каждой группе.

см. ?data.table в деталях для by

Дополнительно: при группировке по by или по я в выражении j могут использоваться символы .SD,.BY и .N, определенные следующим образом.

....

.N - целое число, длина 1, содержащее количество строк в группе.

Например:

dt[, .N ,by = Species]

     Species  N
1:     setosa 50
2: versicolor 50
3:  virginica 50