2014-05-21 3 views
-2

В РИ имеет dataframe с двумя колонками одного является значением, а другая группа, что каждое значение присваивается:R создать новый столбец ранга факторов

my_group my_value 
A 1.2 
B 5.4 
C 9.2 
A 1.1 
B 5.2 
C 9.8 
A 1.3 
B 5.1 
C 9.2 
A 1.0 
B 5.7 
C 9.1 

Я хочу, чтобы создать третью столбец, который использует среднее my_value группы ранжировать группы и входит в этот ранг в каждой строке:

my_group my_value my_group_rank 
A 1.2 3 
B 5.4 2 
C 9.2 1 
A 1.1 3 
B 5.2 2 
C 9.8 1 
A 1.3 3 
B 5.1 2 
C 9.2 1 
A 1.0 3 
B 5.7 2 
C 9.1 1 

ответ

1

следующий код добавит группа занимает в данных, за исключением того, что ряды будут в обратном порядке, возможно, вы все еще можете использовать его. Для этого я использую пакет dplyr. В моем примере я предполагаю, что ваши данные находятся в data.frame, называемом test.

require(dplyr) 

test <- test %>% 
    group_by(my_group) %>% 
    mutate(avg = mean(my_value)) %>% 
    ungroup() %>% 
    mutate(my_group_rank = dense_rank(avg)) %>% 
    select(-avg) 


# my_group my_value my_group_rank 
#1   A  1.2    1 
#2   B  5.4    2 
#3   C  10.2    3 
#4   A  1.1    1 
#5   B  5.2    2 
#6   C  9.8    3 
#7   A  1.3    1 
#8   B  5.1    2 
#9   C  9.2    3 
#10  A  1.0    1 
#11  B  5.7    2 
#12  C  10.1    3 
Смежные вопросы