按字符串长度和字母顺序排序列的R函数?

4
我想按照字符串长度和字母顺序对数据框中的一列进行排序,我尝试了以下代码:

#sort column by string length then alphabet
GSN[order(nchar(GSN[,3]),GSN[,3]),]

但是我遇到了错误。
Error in nchar(GSN[, 3]) : 'nchar()' requires a character vector

我的数据看起来像这样:
    Flowcell Lane    barcode         sample         plate row column
314       NA   NA AACAGACATT   LD06_7620SDS GSN1_Hind384D   B      4
307       NA   NA  AACAGCACT   LG10_2688SDS GSN1_Hind384D   C      3
289       NA   NA     AACCTC  U09_105007SDS GSN1_Hind384D   A      1
232       NA   NA AACGACCACC         13_232 GSN1_Hind384C   H      5
10        NA   NA AACGCACATT          13_10 GSN1_Hind384A   B      2
165       NA   NA      AACGG         13_165 GSN1_Hind384B   E      9

我希望能对“条形码”列进行排序。 感谢您的时间。
2个回答

3
我希望能提供一个整洁的解决方案,使用tidyverse。
library(tidyverse)

GSN_sorted =  GSN %>%
    mutate(barcode = as.character(barcode)) %>%
    arrange(str_length(barcode), barcode)

请注意,此前Alex A.指出的因素转换为字符的问题。

1
对于那些有兴趣加载离散包(而不是所有的tidyverse)的人来说,这个解决方案只需要dplyr和stringr。 - gruvn

3

你可以在数据框中添加另一列,该列包含条形码中的字符数,然后按照通常的方式进行排序。

GSN <- transform(GSN, n=nchar(as.character(barcode)))

GSN[with(GSN, order(n, barcode)), ]

看起来你遇到的问题是因为R认为barcode是一个因子而不是字符向量,因此nchar()无效。通过as.character()将其转换为字符解决了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接