Слияние фреймов данных с отсутствующими значениями в R - PullRequest
2 голосов
/ 03 мая 2011

Код для получения фреймов данных:

rat_all = structure(list(frequency = c(37L, 31L, 14L, 11L, 2L, 3L), isoforms = 8:13,      
    type = structure(c("rat_all", "rat_all", "rat_all", "rat_all",              
    "rat_all", "rat_all"), .Dim = c(6L, 1L))), .Names = c("frequency",          
"isoforms", "type"), row.names = 8:13, class = "data.frame")

rat_ensembl = structure(list(frequency = c(17L, 8L, 20L), isoforms = 8:10,                    
    type = structure(c("rat_ensembl", "rat_ensembl", "rat_ensembl"              
    ), .Dim = c(3L, 1L))), .Names = c("frequency", "isoforms",                  
"type"), row.names = 8:10, class = "data.frame") 

У меня есть два фрейма данных:

  frequency isoforms        type                                               
8         17        8 rat_ensembl                                               
9          8        9 rat_ensembl                                               
10        20       10 rat_ensembl  

и

   frequency isoforms    type                                                   
8         37        8 rat_all                                                   
9         31        9 rat_all                                                   
10        14       10 rat_all                                                   
11        11       11 rat_all                                                   
12         2       12 rat_all                                                   
13         3       13 rat_all   

Я хотел бы объединить их в один фрейм данных, но также включить недостающие isoforms записей, которые появляются во фрейме данных rat_all, но не rat_ensembl фрейм данных. Поэтому я хотел бы, чтобы выходные данные представляли собой объединенный фрейм данных, как если бы я переместился два фрейма данных, но дополненные:

11         0       11 rat_ensembl
12         0       12 rat_ensembl
13         0       13 rat_ensembl

Я думал, что смогу сделать это с помощью слияния, но я получаю огромную путаницу, которую мне приходится раскручивать, чтобы я мог в конечном итоге перейти к нужному формату, но это не очень хорошее решение, если Я хотел сделать это для четырех или пяти разных типов одновременно. Что мне не хватает? Спасибо!

Чтобы было ясно, я ищу окончательный фрейм данных, который выглядит следующим образом:

      frequency isoforms        type                                               
1         17        8 rat_ensembl                                               
2          8        9 rat_ensembl                                               
3         20       10 rat_ensembl                                                   
4         37        8 rat_all                                                   
5         31        9 rat_all                                                   
6         14       10 rat_all                                                   
7         11       11 rat_all                                                   
8          2       12 rat_all                                                   
9          3       13 rat_all   
10         0       11 rat_ensembl
11         0       12 rat_ensembl
12         0       13 rat_ensembl

Я могу заставить его делать то, что я хочу, если я использую:

z = merge(rat_ensembl, rat_all, by.x="isoforms", by.y="isoforms", all.y=TRUE)
   isoforms frequency.x      type.x frequency.y  type.y                         
7         7          44 rat_ensembl          69 rat_all                         
8         8          17 rat_ensembl          37 rat_all                         
9         9           8 rat_ensembl          31 rat_all                         
10       10          20 rat_ensembl          14 rat_all                         
11       11          NA        <NA>          11 rat_all                         
12       12          NA        <NA>           2 rat_all                         
13       13          NA        <NA>           3 rat_all                         
14       14          NA        <NA>           1 rat_all            

Затем теоретически я мог бы выбрать столбцы isoforms, frequency.x, type.x и исправить их, чтобы они были правильными для каждого из rat_ensembl и rat_all, а затем rbind тех фреймы данных вместе, но кажется, что должно быть что-то, чтобы просто обрабатывать это напрямую.

1 Ответ

2 голосов
/ 03 мая 2011

может быть, вы хотите что-то вроде этого

z <- merge(rat_ensembl, rat_all, all = TRUE)

iso_diff <- setdiff(rat_all$isoforms, rat_ensembl$isoforms)

augmented <- data.frame(frequency = 0, isoforms = iso_diff, type = "rat_ensembl", stringsAsFactors= FALSE)

df_all <- rbind(z, augmented)

Надеюсь, это поможет.

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