gpt4 book ai didi

r - 使用长字符串按列对 R 数据帧进行排序

转载 作者:行者123 更新时间:2023-12-02 01:44:58 25 4
gpt4 key购买 nike

如何按包含长字符串的列对 R 数据进行排序?以下示例说明了我的问题:

> a = matrix(NA, nrow=4, ncol=3)
> a[,1] = c(1,2,3,4)
> a[,2] = c("gene001_10M","gene002_10M","gene001_50M","gene002_50M")
> colnames(a) = c("value","sortkey","other")
> a = as.data.frame(a)
> a
value sortkey other
1 1 gene001_10M <NA>
2 2 gene002_10M <NA>
3 3 gene001_50M <NA>
4 4 gene002_50M <NA>

当我现在对“a”进行排序时,排序键似乎是从右向左读取的,而“a”保持不变:

> b = a[sort(a$sortkey),]
> b
value sortkey other
1 1 gene001_10M <NA>
2 2 gene002_10M <NA>
3 3 gene001_50M <NA>
4 4 gene002_50M <NA>

然而,我的目标是:

> b
value sortkey other
1 1 gene001_10M <NA>
3 3 gene001_50M <NA>
2 2 gene002_10M <NA>
4 4 gene002_50M <NA>

最佳答案

当你有numbersalphabets等时,最好使用gtools中的mixedorder,虽然在这里它适用于 order 单独

  a[order(as.character(a$sortkey)),]
# value sortkey other
#1 1 gene001_10M <NA>
#3 3 gene001_50M <NA>
#2 2 gene002_10M <NA>
#4 4 gene002_50M <NA>

此外,使用 sort 会得到 values 而不是 index

   sort(as.character(a$sortkey))
#[1] "gene001_10M" "gene001_50M" "gene002_10M" "gene002_50M"

否则,您必须在 sort

中指定 index.return=TRUE 默认为 FALSE
   sort(as.character(a$sortkey), index.return=TRUE)
#$x
#[1] "gene001_10M" "gene001_50M" "gene002_10M" "gene002_50M"

#$ix
#[1] 1 3 2 4

然后,使用

   a[sort(as.character(a$sortkey), index.return=TRUE)$ix,]
# value sortkey other
#1 1 gene001_10M <NA>
#3 3 gene001_50M <NA>
#2 2 gene002_10M <NA>
#4 4 gene002_50M <NA>

此外,

  library(gtools)
mixedorder(as.character(a$sortkey))
#[1] 1 3 2 4

关于r - 使用长字符串按列对 R 数据帧进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26176869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com