2017-05-29 96 views
1

我有兩個因素tIDfff分別與同級別但4500不同的長度和23000:如何映射具有相同級別但長度不同的因子名稱?

> head(factor(tID)) 
Fungi Metazoa Fungi Fungi Fungi Fungi 
227321 79782 52586 1658174 573508 88771 

Levels: 2 7 9 11 14 16 17 19 20 22 23 24 32 33 34 38 39 41 42 43 47 48 51 52 54 56 61 68 69 72 75 81 85 86 103 104 106 114 119 120 122 124 125 128 134 140 141 142 143 144 148 154 158 159 162 163 165 167 171 172 173 174 179 ... 1985254 

head(fff) 
[1] 4932 870730 34413 4932 4932 9606 
Levels: 2 7 9 11 14 16 17 19 20 22 23 24 32 33 34 38 39 41 42 43 47 48 51 52 54 56 61 68 69 72 75 81 85 86 103 104 106 114 119 120 122 124 125 128 134 140 141 142 143 144 148 154 158 159 162 163 165 167 171 172 173 174 179 ... 1985254 

有來自因素tID名稱映射到fff任何更快的方法?

我知道我可以用lappy()sapply()這樣做,但因素中含有450萬個元素,所以它有點慢。

+0

你能顯示預期的輸出嗎? – akrun

+0

我想說你想做一個連接操作。 – Roland

+0

同樣,您更改了矢量名稱。請讓我們知道這是什麼時候變得固定 – akrun

回答

2

隨着namesmatch

names(fa) <- names(fb)[match(fa, fb)] 

你:

> fa 
name_1 name_1 name_1 name_6 name_6 name_6 name_11 name_11 name_11 name_16 name_16 name_16 name_21 name_21 name_21 
     a  a  a  b  b  b  c  c  c  d  d  d  e  e  e 
Levels: a b c d e 

對於問題的新的例子,這應該是:

names(fff) <- names(tID)[match(fff, tID)] 

例DAT a:

fa <- factor(rep(letters[1:5], each = 3)) 
fb <- factor(rep(letters[1:5], each = 5)) 
fb <- setNames(fb, paste0('name_',seq_along(fb))) 
+0

編輯1:對不起,我編輯了我的問題一點點。 – Chirag

+0

我無法使用粘貼創建名稱。我展示的那個是一個例子。名稱不容易通過粘貼創建原始示例 – Chirag

+0

請參閱最新編輯 – Chirag

相關問題