2017-05-29 9 views
1

は、私は、それぞれ、同じレベルが、4500万と23000の長さが異なる二つの要因tIDfffを持っている:同じレベルで長さの異なる要素の名前のマッピング方法は?

> 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 

fffに要因tIDから名前をマップする任意のより高速な方法はありますか?

lappy()またはsapply()を使用してこれを行うことができますが、要素には450万の要素が含まれているため、少し遅いです。 namesmatch

+0

予想される出力を表示できますか? – akrun

+0

私は、あなたが結合操作をしたいと言うでしょう。 – Roland

+0

再度、ベクトル名を変更しました。これが固定されたとき私達にお知らせください。 – akrun

答えて

2

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)] 

例ダット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

関連する問題