2014-10-03 53 views
1

我有數據的兩個向量,例如:ř找出矢量

vec1 <- c("u", "v", "m", "s", "c","m", "m", "a", "k", "b", "g", "h", "m", "m", "j", "r") 
vec2 <- c(1 , 2 , 3 , 4 , 5 , 3, 3 , 6 , 7 , 8 , 9 ,10, 3, 3, 11, 12) 

的映射被施加到兩個,例如之間的映射在上面的例子中,vec2中的「1」映射到vec1中的「u」,「3」映射到「m」等。

R有找到映射的方法,只給出向量作爲輸入?

回答

3

把它們放入一個data.frame並刪除重複的行。

> tmp <- data.frame(vec1, vec2) 
> unique(tmp) 
    vec1 vec2 
1  u 1 
2  v 2 
3  m 3 
4  s 4 
5  c 5 
8  a 6 
9  k 7 
10 b 8 
11 g 9 
12 h 10 
15 j 11 
16 r 12 
+1

知道爲什麼沒有。沒有意識到在data.frame上獨一無二的工作方式。很高興知道! – Dason 2014-10-03 21:01:22

1

這可能是一個辦法做到這一點:

> tmp <- as.data.frame(table(vec1, vec2)) 
> tmp[tmp$Freq!=0,] 
    vec1 vec2 Freq 
11  u 1 1 
24  v 2 1 
32  m 3 5 
46  s 4 1 
51  c 5 1 
61  a 6 1 
79  k 7 1 
86  b 8 1 
100 g 9 1 
113 h 10 1 
126 j 11 1 
141 r 12 1 
2

使用vec1作爲vec2的名稱。這樣,你就可以使用名爲向量與「[」功能訪問隱映射:

> names(vec2) <- vec1 
> vec2["v"] 
v 
2 

請注意,只有在第一場比賽將被退回。如果你想刪除重複:

> vec2[!duplicated(vec2)] 
u v m s c a k b g h j r 
1 2 3 4 5 6 7 8 9 10 11 12 

如果你想拉出來的子集,使用%功能%,其中建立一個邏輯索引:

> vec2[ names(vec2) %in% letters[10:15] ] 
m m m k m m j 
3 3 3 7 3 3 11