#r #dataframe #replace #find-replace
Вопрос:
Я приношу извинения, если формулировка моего вопроса не имела большого смысла, но, надеюсь, мое объяснение поможет.
Допустим, у меня есть ex
фрейм данных , который выглядит так:
geneID sample1 sample2
1 1 18 2
2 10 6 17
3 100 9 12
И соответствующая таблица, convtab
, которая выглядит так:
geneID genesymbol
1 1 A1BG
2 10 NAT2
3 100 ADA
Цель здесь состоит в том , чтобы для каждого генеида в ex
, если он соответствует значению в convtab$geneID
, заменить его соответствующим значением из convtab$genesymbol
той же строки.
Например, значение в [1,1] ex
, равное 1, будет заменено на A1BG.
Хотя я мог бы сделать это вручную с помощью этого набора примеров, мой фактический набор данных намного больше, поэтому у меня не было бы шансов изменить значения вручную.
Я был бы очень признателен за помощь!
Комментарии:
1.
ex$geneID <- convtab$genesymbol[match(ex$geneID, convtab$geneID)]
2. К вашему сведению, вы сказали «если это совпадает» , предполагая, что это может не всегда совпадать. Если отсутствует совпадение, то этот код будет неполным, что приведет к тому, что ваши не совпадающие идентификаторы будут выглядеть как
NA
.
Ответ №1:
Как отмечается в комментариях, это можно сделать следующим образом:
ex$geneID <- convtab$genesymbol[match(ex$geneID, convtab$geneID)]
Ответ №2:
Используя dplyr
вы могли бы left_join данные.кадры:
library(dplyr)
ex %>%
left_join(rep, by=("geneID")) %>%
select(-geneID, geneID=genesymbol)
ВОЗВРАТ
# A tibble: 3 x 3
sample1 sample2 geneID
<dbl> <dbl> <chr>
1 18 2 A1BG
2 6 17 NAT2
3 9 12 ADA