2015-06-15 169 views
1

說我有一個載體映射條目的數據幀列

vec1 <- c(4,8,2,9) 

和另一矢量

vec2 <- c("One","One","One","One","Two",Two","Two","Three","Four","Four") 

我想獲得一個數據幀myData它看起來像

V1 V2 
4  "One" 
4  "One" 
4  "One" 
4  "One" 
8  "Two" 
8  "Two" 
8  "Two" 
2  "Three" 
9  "Four" 
9  "Four" 

這意味着myData具有長度(vec2)行。如果有幫助:vec2中的數據總是排列在一個塊中 - 例如在1:4的其他行中永遠不會發生「一」。有沒有一種方法來實現這一點?

謝謝

回答

4

你可以嘗試使用match

data.frame(V1=vec1[match(vec2, unique(vec2))], V2=vec2, stringsAsFactors=F) 

    # V1 V2 
# 1 4 One 
# 2 4 One 
# 3 4 One 
# 4 4 One 
# 5 8 Two 
# 6 8 Two 
# 7 8 Two 
# 8 2 Three 
# 9 9 Four 
# 10 9 Four 

使用rle,由於@DavidArenburg另一種選擇:

data.frame(V1=rep(vec1, rle(vec2)$lengths), V2=vec2, stringsAsFactors=F) 
+2

或'cbind(V1 =代表(VEC 1,RLE (vec2)$個長度),V2 = vec2)'如果'V2'像例子那樣排序。 –

+0

@DavidArenburg,是的,但與data.frame或V1將被強制字符... – Cath

+1

謝謝,這個作品很棒:) – MineSweeper