2016-04-04 2 views
0

Я изо всех сил пытался присвоить значения некоторым группам в некоторых данных, но я несколько застрял. Я пробовал match ing unique и rep и другие. Надеюсь, кто-то здесь может мне помочь.Назначить вектор длинному вектору по группе

У меня есть набор данных, который выглядит как этот

df <- data.frame(
GRP.id = c(1, 2, 2, 2, 3, 3), 
group = c("A", "B", "B", "B", "C", "C")) 
> df 
    GRP.id group 
1  1  A 
2  2  B 
3  2  B 
4  2  B 
5  3  C 
6  3  C 

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

value <- c(.3, .8, .3) 

так, что я получаю этот результат

GRP.id group value 
1  1  A 0.3 
2  2  B 0.8 
3  2  B 0.8 
4  2  B 0.8 
5  3  C 0.3 
6  3  C 0.3 

ответ

2
df$value <- value[match(df$GRP.id,unique(df$GRP.id))]; 
df; 
## GRP.id group value 
## 1  1  A 0.3 
## 2  2  B 0.8 
## 3  2  B 0.8 
## 4  2  B 0.8 
## 5  3  C 0.3 
## 6  3  C 0.3 

Если y ou знаю, что столбец df$GRP.id всегда будет состоять из 1:n для некоторого макс. n, тогда вы можете заменить match(df$GRP.id,unique(df$GRP.id)) штукой только df$GRP.id. Но для надежности (т. Е. На всякий случай, что это предположение не всегда будет истинным), я бы пошел с дизайном /unique().

+0

Очень красивый ответ. Благодарим вас за добавленный комментарий о надежности. Могу ли я спросить, почему вы заканчиваете свои строки с помощью ';'? –

+0

@ EricFail Спасибо :) См. Http://stackoverflow.com/a/29004774/4272464 для моего стандартного ответа о точках с запятой. – bgoldst

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