Слияние фреймов данных в R с дублированными значениями в именах строк - PullRequest
0 голосов
/ 11 мая 2018

я пытаюсь использовать функцию rbind точно так же, как в этом посте.

У меня есть 3 кадра данных с 2 столбцами (имена строк и «источник»).

Между первым и вторым кадрами данных есть два дублированных значения имен строк, а между первым и третьим кадрами данных - один.

a

TMCS09g1008676 fleshy TMCS09g1008677 fleshy TMCS09g1008678 fleshy TMCS09g1008679 fleshy TMCS09g1008680 fleshy TMCS09g1008681 fleshy TMCS09g1008682 fleshy TMCS09g1008683 fleshy

b

TMCS09g1008684 rotten TMCS09g1008685 rotten TMCS09g1008686 rotten TMCS09g1008682 rotten TMCS09g1008688 rotten TMCS09g1008689 rotten TMCS09g1008690 rotten TMCS09g1008691 rotten TMCS09g1008683 rotten TMCS09g1008693 rotten

c

TMCS09g1008695 good TMCS09g1008696 good TMCS09g1008697 good TMCS09g1008698 good TMCS09g1008683 good TMCS09g1008700 good TMCS09g1008701 good TMCS09g1008702 good TMCS09g1008703 good TMCS09g1008704 good TMCS09g1008705 good

после применения функции, предложенной в этом посте:

duprows <- which(!is.na(match(rownames(a),rownames(b)))) rbind(a, b[-duprows,])

я получаю это:
> rbind(a, b[-duprows,]) source TMCS09g1008677 fleshy TMCS09g1008678 fleshy TMCS09g1008679 fleshy TMCS09g1008680 fleshy TMCS09g1008681 fleshy TMCS09g1008682 fleshy TMCS09g1008683 fleshy 8 <NA> Warning message: In [<-. Factor <code>( tmp, ri, value = 1L) : invalid factor level, NA generated

Главное, что я хотел бы сохранить 2-й столбец кадра данных "a" для дублированных значений.Как мне было понятно.
Заранее спасибо

1 Ответ

0 голосов
/ 11 мая 2018

Что вы думаете об этом.

Пример данных (ваши данные - воспроизводимые;)):

require(tidyverse)

a <- data.frame(ID = c("TMCS09g1008676",
          "TMCS09g1008677",
          "TMCS09g1008678",
          "TMCS09g1008679",
          "TMCS09g1008680" ,
          "TMCS09g1008681",
          "TMCS09g1008682",
          "TMCS09g1008683"), Staus = rep("fleshy"))

b <- data.frame(ID = c( "TMCS09g1008684" ,
                        "TMCS09g1008685" ,
                        "TMCS09g1008686" ,
                        "TMCS09g1008682"  ,
                        "TMCS09g1008688" ,
                        "TMCS09g1008689" ,
                        "TMCS09g1008690" ,
                        "TMCS09g1008691",
                        "TMCS09g1008683" ,
                        "TMCS09g1008693"), Staus = rep("rotten"))

c <- data.frame(ID = c( "TMCS09g1008695" ,
                        "TMCS09g1008696"  ,
                        "TMCS09g1008697" ,
                        "TMCS09g1008698"  ,
                        "TMCS09g1008683"  ,
                        "TMCS09g1008700" ,
                        "TMCS09g1008701"  ,
                        "TMCS09g1008702" ,
                        "TMCS09g1008703"  ,
                        "TMCS09g1008704" ,
                        "TMCS09g1008705" ), Staus = rep("good"))

Вы можете использовать plyr::join_all для сопоставления.Поскольку у вас есть дублированные идентификаторы, вам придется открывать новые столбцы, чтобы соответствовать дублированным значениям.

plyr::join_all(list(a,b,c), by = "ID")

Результаты:

              ID  Staus  Staus Staus
1 TMCS09g1008676 fleshy   <NA>  <NA>
2 TMCS09g1008677 fleshy   <NA>  <NA>
3 TMCS09g1008678 fleshy   <NA>  <NA>
4 TMCS09g1008679 fleshy   <NA>  <NA>
5 TMCS09g1008680 fleshy   <NA>  <NA>
6 TMCS09g1008681 fleshy   <NA>  <NA>
7 TMCS09g1008682 fleshy rotten  <NA>
8 TMCS09g1008683 fleshy rotten  good
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...