2016-04-04 32 views
0

Bazı verilerde bazı gruplara değerler atamak için uğraşıyordum ama biraz sıkışmış durumdayım. Ben unique 's ve rep ve diğer denedim. Umarım birileri bana yardım edebilir.Vektörü daha uzun vektör grubuna göre atama

Ben her gruba atamak gereken bazı değerler ile bu

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 

ve bir vektör gibi görünen bir veri setine sahip

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

böyle bu bir sonuç almak

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 

cevap

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 

ysütunun her zaman n için 1:n'dan oluşacağını biliyorsunuz, daha sonra match(df$GRP.id,unique(df$GRP.id)) parçasını sadece df$GRP.id ile değiştirebilirsiniz. Ancak sağlamlık için (yani, varsayımın her zaman doğru olmayacağı durumlarda), match()/unique() tasarımına gidecektim.

+0

Çok güzel yanıt. Sağlamlık hakkındaki yorumlarınız için teşekkür ederiz. Hatlarını neden bir “;” ile sonlandırdığını sorabilir miyim? –

+0

@EricFail Teşekkürler :) Noktalı virgüller hakkında standart yanıtım için http://stackoverflow.com/a/29004774/4272464 adresine bakın. – bgoldst