Сортировка в естественном порядке по столбцу в R - PullRequest
0 голосов
/ 19 сентября 2018

Я использовал full.joint для объединения двух таблиц:

fsts = full_join(fstvarcal, fst, by = "SNP")

И это имело эффект группировки 1-ых строк, для которых были значения для двух наборов данных, за которыми следовали строки, для которых былизначения только для 1-го набора данных (и NA для 2-го), за которыми следуют строки, для которых были значения только для 2-го набора данных (и NA для 1-го).

Я сейчас пытаюсь заказать по естественному порядку .

Ищите эквивалент sort -V -k1 в bash.

Я пробовал:

library(naturalsort);

fstordered = fsts[naturalorder(fsts$SNP),]

, который работает, но он очень медленный.

Есть ли более быстрые способы сделать это?Или слияния двух наборов данных без потери естественного порядка?

У меня есть:

SNP fst
scaffold_0   0.186473
scaffold_9   0.186475
scaffold_10  0.186472
scaffold_11  0.186470
scaffold_99  0.186420
scaffold_100 0.186440

и

SNP fstvarcal
scaffold_0    0.186472
scaffold_8    0.186475
scaffold_20   0.186477
scaffold_21   0.186440
scaffold_999  0.186450
scaffold_1000 0.186420

и я хочу объединиться в

SNP fstvarcal fst
scaffold_0    0.186472 0.186473
scaffold_8    0.186475    NA
scaffold_9       NA    0.186475
scaffold_10      NA    0.186472
scaffold_11      NA    0.186470
scaffold_20   0.186477   NA    
scaffold_21   0.186440   NA    
scaffold_99      NA    0.186420
scaffold_100     NA    0.186440
scaffold_999  0.186450   NA    
scaffold_1000 0.186420   NA  

1 Ответ

0 голосов
/ 19 сентября 2018

Возможно, вы можете сделать следующее:

Сначала я сгенерирую некоторые репрезентативные данные выборки.

set.seed(2018)
df <- data.frame(
    SNP = sprintf("scaffold_%i", 1:1000),
    val = rnorm(1000))
df <- df[df$SNP, ]

Теперь мы используем tidyr::separate для разделения SNP на "id" и "no" и arrange строк на "id" и "no" для обеспечения естественного упорядочения (convert = T автоматически преобразует "no" в integer вектор-столбец).

library(tidyverse)
df %>%
    separate(SNP, into = c("id", "no"), remove = F, convert = T) %>%
    arrange(id, no) %>%
    select(-id, -no)
#               SNP           val
#1       scaffold_1 -0.4229839834
#2       scaffold_2 -1.5498781617
#3       scaffold_3 -0.0644293189
#4       scaffold_4  0.2708813526
#5       scaffold_5  1.7352836655
#6       scaffold_6 -0.2647112113
#7       scaffold_7  2.0994707023
#8       scaffold_8  0.8633512196
#9       scaffold_9 -0.6105871453
#10     scaffold_10  0.6370556066
#11     scaffold_11 -0.6430346953
#...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...