2015-03-03 5 views
1

Je voudrais trier une colonne dans ma trame de données par longueur de la chaîne d'abord, puis par ordre alphabétique, j'ai essayé le code ci-dessous:R fonction de tri de colonne par longueur de chaîne puis par alphabet?

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

Mais je suis erreur

Error in nchar(GSN[, 3]) : 'nchar()' requires a character vector 

Mes données ressemble:

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 

Je voudrais trier la colonne "code à barres". Merci pour votre temps.

Répondre

2

Vous pouvez ajouter une autre colonne à votre bloc de données qui contient le nombre de caractères dans le code à barres, puis trier de la manière habituelle.

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

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

Il semble que le problème que vous rencontrez est parce que R pense que barcode est un facteur plutôt qu'un vecteur de caractère, donc nchar() est invalide. Le convertir en caractère via as.character() résout cela.