2015-11-11 5 views
1

У меня вопрос о нумерации групп в data.frame.Нумерация групп в dplyr?

я нашел только один подобный подход здесь dplyr-how-to-number-label-data-table-by-group-number-from-group-by

, но оно не работает для меня. Я не знаю, почему.

S <- rep(letters[1:12],each=6) 
R = sort(replicate(9, sample(5000:6000,4))) 
df <- data.frame(R,S) 

get_next_integer = function(){ 
    i = 0 
    function(S){ i <<- i+1 } 
} 
get_integer = get_next_integer() 

result <- df %>% group_by(S) %>% mutate(label = get_integer()) 
result 

Source: local data frame [72 x 3] 
Groups: S [12] 

     R  S label 
    (int) (fctr) (dbl) 
1 5058  a  1 
2 5121  a  1 
3 5129  a  1 
4 5143  a  1 
5 5202  a  1 
6 5213  a  1 
7 5239  b  1 
8 5245  b  1 
9 5269  b  1 
10 5324  b  1 
.. ... ... ... 

Я ищу элегантное решение в dplyr. Нумерация каждой буквы от 1 до 12 и т.д.

+1

Есть ли причина для этого в 'dplyr'? 'df $ label <- as.numeric (factor (df $ S))' – hrbrmstr

+1

@Frank, как 'df $ label <- group_indices (df, S)' бесполезно? – hrbrmstr

+0

На самом деле, это не вся суть пакета. цепочка является приятным дополнительным компонентом, но вся точка pkg должна была обеспечить более стандартизованный и разумный способ обработки макетов данных. – hrbrmstr

ответ

6

Использование as.numeric сделает трюк.

S <- rep(letters[1:12],each=6) 
R = sort(replicate(9, sample(5000:6000,4))) 
df <- data.frame(R,S) 

result <- df %>% mutate(label = as.numeric(S)) %>% group_by(S) 

result 
Source: local data frame [72 x 3] 
Groups: S 

     R S label 
1 5018 a  1 
2 5042 a  1 
3 5055 a  1 
4 5066 a  1 
5 5081 a  1 
6 5133 a  1 
7 5149 b  2 
8 5191 b  2 
9 5197 b  2 
10 5248 b  2 
.. ... . ... 
+1

Почему не просто 'df%>% mutate (label = as.numeric (S))' - нет необходимости группироваться, когда вы работаете над самой групповой переменной. – thelatemail

+0

@thelatemail Да, я знал, что это необязательно, но предполагал, что OP захочет сгруппироваться на основе приведенного кода примера, запроса решения dplyr и использования тега group-by. Я не уверен, нужно ли это убрать ... – N311V

2

Не нужно использовать dplyr вообще.

S <- rep(letters[1:12],each=6) 
R = sort(replicate(9, sample(5000:6000,4))) 
df <- data.frame(R,S) 

df$label <- as.numeric(factor(df$S)) 
+0

спасибо всем :)) оба ответа полезны – Alexander

Смежные вопросы