Мы могли бы использовать любой из агрегатов по группам.
Опция data.table
будет преобразовать «data.frame» в «data.table» (setDT(dat)
), сгруппированных по «континент» и переменные «бин», мы получим число элементов в каждой группе (. N
)
library(data.table)
setDT(dat)[,list(Count=.N) ,.(continent,bin)]
# continent bin Count
#1: Africa 10 3
#2: Asia 20 1
#3: Africa 30 1
#4: Asia 10 1
Или подобный вариант с dplyr
путем группирования переменных, а затем использовать n()
вместо .N
, чтобы получить количество.
library(dplyr)
dat %>%
group_by(continent, bin) %>%
summarise(Count=n())
Или мы можем использовать aggregate
из base R
и используя метод формулу, мы получим length
.
aggregate(cbind(Count=width)~., dat, FUN=length)
# continent bin Count
#1 Africa 10 3
#2 Asia 10 1
#3 Asia 20 1
#4 Africa 30 1
От @ Франка и комментарии @David Arenburg, некоторые дополнительные опции, используя data.table
и dplyr
. Мы превращаем набор данных в data.table
(setDT(dat)
), конвертировать в 'широкий' формат с dcast
, а затем переконвертировать его обратно в 'длинный', используя melt
и подмножество в roww (value>0
)
library(data.table)
melt(dcast(setDT(dat),continent~bin))[value>0]
Использование count
из dplyr
library(dplyr)
count(dat, bin, continent)
Ради использованием 'melt', как указано в названии:' setDT (расплава (dcast (DAT, континент ~ бен))) [значение> 0] '' – Frank
Кроме того, подсчет (DAT , bin, continent) ' –