2016-05-19 5 views
0

У меня два varaibles А и ВНет строки в группе

a 
neat 
neat 
sweet 
sweet 

Я хочу, чтобы сгруппировать переменную а и получить не строки в каждой группе. В приведенном выше случае это будет 2 для каждой группы

+0

Параметр ' dplyr': 'df%>% group_by (a)%>% sumize (n = n())' или просто 'df%>% count (a)'. 'table (df $ a)' работает тоже, в зависимости от того, что вы пытаетесь сделать. – alistaire

ответ

0

Вы можете использовать aggregate

aggregate(df, list(df$a), length) 

# Group.1 a 
#1 neat 2 
#2 sweet 2 

Или, как указано в комментариях по @alistaire вы можете также использовать table, чтобы получить частоту каждого уникального слова

table(df$a) 

# neat sweet 
# 2  2 
0

Мы можем использовать data.table. Преобразуйте 'data.frame' в 'data.table' (setDT(df1)), сгруппированный по 'a', мы назначаем (:=) новый столбец ('b') с количеством строк (.N).

setDT(df1)[, b := .N, by = a] 

Или с помощью ave из base R

df1$b <- with(df1, ave(seq_along(a), a, FUN = length)) 

Или, если 'а' колонка упорядочена,

df1$b <- cumsum(!duplicated(df1$a)) 

Если нужно обобщенную выход вместо создание новой колонки

setDT(df1)[, .(b = .N), by = a] 
#  a b 
#1: neat 2 
#2: sweet 2 

Или с base R, мы можем использовать tabulate, которая будет очень быстро.

tabulate(factor(df1$a))  
Смежные вопросы