我使用full.joint合并了两个表:
fsts = full_join(fstvarcal, fst, by = "SNP")
这具有以下效果:将两个数据集具有值的第一行分组,然后将仅第一数据集具有值(第二个NA包含)的行分组,然后将存在第二个数据集的行分组值仅适用于第二个数据集(而第一个NA则不适用)。
我正在尝试按自然顺序订购 。
在bash中寻找sort -V -k1
的等效项。
我已经尝试过:
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
和wan合并成
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
答案 0 :(得分:0)
也许您可以执行以下操作:
我首先生成一些代表性的样本数据。
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
#...