Объединение двух фреймов данных не может заполнить столбцы при объединении - PullRequest
0 голосов
/ 08 февраля 2020

Я новичок в использовании R. У меня есть два фрейма данных (как показано ниже), и я хотел бы добавить информацию из df2 в df1. Единственный общий столбец между обоими фреймами данных - «Образец». Поэтому я попытался использовать этот столбец для объединения обоих фреймов данных.

df1

structure(list(Segment = c(3L, 3L, 3L, 4L, 5L, 6L, 6L, 6L, 7L, 
7L), Position = c(838L, 891L, 1204L, 732L, 1550L, 688L, 1167L, 
1446L, 950L, 981L), `AA-REF` = structure(c(2L, 5L, 7L, 6L, 1L, 
8L, 8L, 1L, 3L, 4L), .Label = c("", "D", "E", "H", "K", "L", 
"Q", "T"), class = "factor"), `AA-ALT` = structure(c(4L, 2L, 
2L, 3L, NA, 5L, 3L, NA, 1L, 4L), .Label = c("E", "K", "M", "N", 
"T"), class = "factor"), SYN = structure(c(2L, 3L, 2L, 2L, 1L, 
3L, 2L, 1L, 3L, 2L), .Label = c("     ", "N     ", "Y     "), class = "factor"), 
    Sample = c("AO103", "AO103", "AO103", "AO103", "AO103", "AO103", 
    "AO103", "AO103", "AO103", "AO103")), row.names = c(NA, 10L
), class = "data.frame")
  Segment Position AA-REF AA-ALT    SYN Sample
1         3      838      D      N N       AO103
2         3      891      K      K Y       AO103
3         3     1204      Q      K N       AO103
4         4      732      L      M N       AO103
5         5     1550          <NA>         AO103
6         6      688      T      T Y       AO103
7         6     1167      T      M N       AO103
8         6     1446          <NA>         AO103
9         7      950      E      E Y       AO103
10        7      981      H      N N       AO103
11        8      199      T      N N       AO103
12        1      341      T      K N       AO104
13        1      934      T      A N       AO104
14        1     1327      L      F N       AO104
15        1     1349      D      G N       AO104

df2

structure(list(Sample = c("AO208 ", "AO209 ", "AO210 ", "AO211 ", 
"AO212 ", "AO213 ", "AO100 ", "AO101 ", "AO102 ", "AO103 "), 
    Quail = c(7, 8, 9, 10, 11, 12, 7, 8, 9, 10), day = c(3, 3, 
    3, 3, 3, 3, 5, 5, 5, 5), Expo = structure(c(1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L), .Label = " DC ", class = "factor"), 
    Group = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L
    ), .Label = " var", class = "factor")), row.names = c(NA, 
10L), class = "data.frame")
 Sample Quail day Expo Group
1  AO208      7   3  DC    var
2  AO209      8   3  DC    var
3  AO210      9   3  DC    var
4  AO211     10   3  DC    var
5  AO212     11   3  DC    var
6  AO213     12   3  DC    var
7  AO100      7   5  DC    var
8  AO101      8   5  DC    var
9  AO102      9   5  DC    var
10 AO103     10   5  DC    var
11 AO104     11   5  DC    var

ПРИМЕЧАНИЕ. Не все записи в df2 $ Sample присутствуют в df1 $ Sample

Я хотел бы получить что-то вроде следующего:

  Segment Position AA-REF AA-ALT    SYN Sample    Quail   day    Expo    Group
1         3      838      D      N N       AO103    10   5  DC    var
2         3      891      K      K Y       AO103    10   5  DC    var
3         3     1204      Q      K N       AO103    10   5  DC    var
4         4      732      L      M N       AO103    10   5  DC    var
5         5     1550          <NA>         AO103    10   5  DC    var
6         6      688      T      T Y       AO103    10   5  DC    var
7         6     1167      T      M N       AO103    10   5  DC    var
8         6     1446          <NA>         AO103    10   5  DC    var
9         7      950      E      E Y       AO103    10   5  DC    var
10        7      981      H      N N       AO103    10   5  DC    var
11        8      199      T      N N       AO103    10   5  DC    var
12        1      341      T      K N       AO104    11   5  DC    var
13        1      934      T      A N       AO104    11   5  DC    var
14        1     1327      L      F N       AO104    11   5  DC    var
15        1     1349      D      G N       AO104    11   5  DC    var

Я пытался:

x <- merge(df1, df2, by = "Sample", all = TRUE)

Даже если это добавляет столбцы, все из df2 помещается в конец df1.

Я также попытался использовать dplyr left_join (среди прочего) как:

x <- df1 %>%
  left_join(df2, by = "Sample")

Это добавляет пустые столбцы из df2 и вообще никакой информации.

Я просматривал много объединенных сообщений, но ни одна из них, похоже, не решала мою проблему.

Я также пытался сопоставить без успеха.

1 Ответ

1 голос
/ 08 февраля 2020
x <- merge(x=df1, y=df2, by = "Sample", all.x = TRUE)

Вам нужны только все столбцы из df1, поэтому вам нужно только all.x.

Призывать Tanner33, если вы хотите использовать пакеты dplyr или tidyverse.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...