2017-05-29 57 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

相关问题