Простые таблицы частот с использованием 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
Есть ли элегантный способ?
Ответы
Ответ 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