【问题标题】:Sorting in natural order by column in R在R中按自然顺序排序
【发布时间】:2018-09-19 09:51:30
【问题描述】:

我已经使用 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  

【问题讨论】:

  • 请将此问题设为可重复的问题,参考:stackoverflow.com/questions/5963269stackoverflow.com/help/mcvestackoverflow.com/tags/r/info。初学者:列出所有正在使用的非基础包(dplyr?);包含少量消耗数据,不作为图片,我不会从图片转录,建议dput(head(x));包括与问题相关的其他函数的代码,例如naturalorder
  • 您能否提供fsts代表性样本数据。据我所知,fsts 将具有相同的字母顺序和自然顺序。
  • k 刚刚更新了信息。该表从scaffold_0_14500 到scaffold_3015_5000(其中有BP.x 和BP.y 的数据)然后跳回到scaffold_0_1000 并上升到scaffold_3015_5500(其中只有BP.y 的数据)。

标签: r sorting join


【解决方案1】:

也许您可以执行以下操作:

我先生成一些有代表性的样本数据。

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

我们现在使用tidyr::separateSNP 分隔为"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
#...

【讨论】:

  • 您好,谢谢!不确定这是我要找的。我已经改写了这个问题,以便更容易理解。
  • @MadzaYasodaraFariasVirgens 很抱歉,但至少对我而言,您的编辑并没有多大作用。只需将两个data.frames 结合起来,然后按SNP 排序,正如我在答案中所示。这将使您在data.frame 中对SNP 条目进行自然排序。
猜你喜欢
  • 2013-01-07
  • 1970-01-01
  • 1970-01-01
  • 2016-08-19
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多