Lime
Lime

Reputation: 754

Sorting values within column

For some reason, one of my range values 50 - 100 cannot be rearranged within the column. I have also used arrange(x), and it does not work. I wish for your support in helping me figure this out.

How to properly rearrange my column so 50 - 100 comes after 0 - 50

Here's the dataset:

Rows: 143
Columns: 6
$ group <fct> 2.5 - 3.0, 3.0 - 3.5, 3.5 - 4.0, 4.0 - 4.5, 4.5 - 5.0, 5.0 - 5.5, 5.5 - 6.0, 6.0 - 6.5, 6.5 - 7.0, 7.0 - 7.5, 7.5 - 8.0, 2.5 - 3.0, 3.0 -...
$ x     <fct> 0 - 50, 0 - 50, 0 - 50, 0 - 50, 0 - 50, 0 - 50, 0 - 50, 0 - 50, 0 - 50, 0 - 50, 0 - 50, 100 - 150, 100 - 150, 100 - 150, 100 - 150, 100 -...
$ y1    <int> 20108, 8042, 3347, 1529, 690, 340, 121, 63, 24, 3, NA, 1914, 1514, 646, 216, 84, 46, 9, 2, 1, 1, NA, 1056, 1276, 881, 289, 87, 31, 9, 4, ...
$ y2    <int> 20658, 8171, 3552, 1717, 894, 377, 127, 38, 10, 12, 4, 2819, 1815, 639, 230, 98, 37, 20, 7, 3, 1, NA, 1728, 1705, 948, 328, 118, 41, 16, ...
$ y3    <int> 20729, 8281, 3428, 1520, 853, 398, 160, 57, 10, 4, 5, 2556, 1633, 625, 219, 90, 56, 15, 10, NA, 1, 2, 1564, 1566, 938, 303, 103, 33, 16, ...
$ y4    <int> 19436, 7767, 3251, 1414, 697, 356, 125, 48, 22, 7, 4, 2035, 1645, 658, 189, 71, 47, 26, 6, 2, 1, 1, 1149, 1340, 924, 304, 85, 32, 9, 4, N...

reproducible code:

structure(list(group = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 
8L, 9L, 10L, 11L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 
1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 1L, 2L, 3L, 4L, 
5L, 6L, 7L, 8L, 9L, 10L, 11L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
9L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 1L, 2L, 3L, 4L, 
5L, 6L, 7L, 8L, 9L, 10L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 
11L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 1L, 2L, 3L, 4L, 5L, 6L, 
7L, 8L, 9L, 10L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 1L, 2L, 
3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 
8L, 9L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 4L, 5L, 7L, 
8L), .Label = c("2.5 - 3.0", "3.0 - 3.5", "3.5 - 4.0", "4.0 - 4.5", 
"4.5 - 5.0", "5.0 - 5.5", "5.5 - 6.0", "6.0 - 6.5", "6.5 - 7.0", 
"7.0 - 7.5", "7.5 - 8.0"), class = "factor"), x = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 7L, 7L, 
7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 
8L, 8L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 10L, 10L, 10L, 10L, 10L, 
10L, 10L, 10L, 10L, 10L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 
11L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 13L, 13L, 
13L, 13L, 13L, 13L, 13L, 13L, 13L, 14L, 14L, 14L, 14L, 14L, 14L, 
14L, 14L, 14L, 14L, 15L, 15L, 15L, 15L), .Label = c("0 - 50", 
"100 - 150", "150 - 200", "200 - 250", "250 - 300", "300 - 350", 
"350 - 400", "400 - 450", "450 - 500", "50 - 100", "500 - 550", 
"550 - 600", "600 - 650", "650 - 700", "700 - 750"), class = "factor"), 
    y1 = c(20108L, 8042L, 3347L, 1529L, 690L, 340L, 121L, 63L, 
    24L, 3L, 0L, 1914L, 1514L, 646L, 216L, 84L, 46L, 9L, 2L, 
    1L, 1L, 0L, 1056L, 1276L, 881L, 289L, 87L, 31L, 9L, 4L, 0L, 
    3L, 0L, 508L, 545L, 563L, 265L, 68L, 22L, 4L, 6L, 0L, 0L, 
    1L, 100L, 102L, 201L, 108L, 60L, 23L, 1L, 1L, 0L, 10L, 16L, 
    49L, 96L, 46L, 15L, 1L, 1L, 0L, 0L, 4L, 1L, 26L, 55L, 24L, 
    11L, 4L, 1L, 0L, 0L, 2L, 1L, 20L, 30L, 18L, 5L, 2L, 2L, 0L, 
    1L, 0L, 2L, 8L, 21L, 18L, 3L, 1L, 1L, 3709L, 1536L, 419L, 
    165L, 63L, 39L, 19L, 6L, 4L, 3L, 0L, 5L, 3L, 29L, 34L, 15L, 
    6L, 0L, 1L, 0L, 3L, 14L, 33L, 51L, 21L, 9L, 3L, 2L, 1L, 1L, 
    6L, 5L, 38L, 31L, 18L, 5L, 1L, 1L, 0L, 0L, 5L, 4L, 17L, 14L, 
    4L, 0L, 0L, 0L, 0L, 2L, 0L, 0L), y2 = c(20658L, 8171L, 3552L, 
    1717L, 894L, 377L, 127L, 38L, 10L, 12L, 4L, 2819L, 1815L, 
    639L, 230L, 98L, 37L, 20L, 7L, 3L, 1L, 0L, 1728L, 1705L, 
    948L, 328L, 118L, 41L, 16L, 5L, 4L, 0L, 0L, 794L, 855L, 597L, 
    249L, 98L, 26L, 7L, 0L, 1L, 0L, 0L, 164L, 185L, 221L, 172L, 
    65L, 13L, 1L, 1L, 1L, 27L, 22L, 71L, 105L, 62L, 18L, 1L, 
    0L, 0L, 1L, 10L, 4L, 41L, 74L, 30L, 9L, 1L, 0L, 0L, 0L, 3L, 
    3L, 31L, 55L, 21L, 11L, 3L, 0L, 0L, 0L, 2L, 1L, 12L, 29L, 
    18L, 11L, 5L, 0L, 4116L, 1520L, 485L, 185L, 64L, 58L, 25L, 
    10L, 7L, 2L, 2L, 5L, 17L, 55L, 58L, 24L, 6L, 1L, 0L, 2L, 
    8L, 22L, 55L, 53L, 33L, 6L, 3L, 0L, 0L, 0L, 2L, 17L, 38L, 
    47L, 25L, 7L, 2L, 0L, 1L, 4L, 8L, 15L, 14L, 11L, 4L, 1L, 
    0L, 1L, 0L, 0L, 2L, 0L), y3 = c(20729L, 8281L, 3428L, 1520L, 
    853L, 398L, 160L, 57L, 10L, 4L, 5L, 2556L, 1633L, 625L, 219L, 
    90L, 56L, 15L, 10L, 0L, 1L, 2L, 1564L, 1566L, 938L, 303L, 
    103L, 33L, 16L, 3L, 0L, 1L, 1L, 761L, 740L, 584L, 257L, 108L, 
    25L, 6L, 2L, 0L, 0L, 0L, 163L, 186L, 204L, 153L, 67L, 24L, 
    10L, 0L, 1L, 23L, 18L, 56L, 108L, 60L, 11L, 0L, 0L, 1L, 0L, 
    6L, 9L, 27L, 61L, 27L, 4L, 6L, 2L, 1L, 1L, 6L, 7L, 23L, 45L, 
    25L, 10L, 4L, 1L, 0L, 0L, 5L, 3L, 20L, 34L, 27L, 3L, 5L, 
    0L, 4164L, 1565L, 497L, 178L, 69L, 52L, 29L, 7L, 3L, 3L, 
    3L, 2L, 19L, 38L, 46L, 21L, 9L, 1L, 0L, 1L, 7L, 15L, 58L, 
    61L, 27L, 10L, 1L, 0L, 0L, 0L, 5L, 17L, 39L, 34L, 26L, 6L, 
    2L, 1L, 0L, 1L, 9L, 15L, 15L, 16L, 1L, 1L, 0L, 1L, 1L, 1L, 
    2L, 1L), y4 = c(19436L, 7767L, 3251L, 1414L, 697L, 356L, 
    125L, 48L, 22L, 7L, 4L, 2035L, 1645L, 658L, 189L, 71L, 47L, 
    26L, 6L, 2L, 1L, 1L, 1149L, 1340L, 924L, 304L, 85L, 32L, 
    9L, 4L, 0L, 0L, 0L, 510L, 524L, 579L, 242L, 95L, 26L, 6L, 
    2L, 1L, 2L, 0L, 117L, 117L, 198L, 145L, 63L, 19L, 7L, 0L, 
    0L, 26L, 14L, 49L, 70L, 52L, 14L, 2L, 0L, 0L, 1L, 3L, 2L, 
    20L, 47L, 30L, 8L, 3L, 1L, 2L, 1L, 1L, 1L, 20L, 30L, 15L, 
    4L, 2L, 2L, 1L, 0L, 4L, 0L, 8L, 19L, 12L, 9L, 1L, 0L, 3838L, 
    1525L, 450L, 162L, 72L, 43L, 27L, 6L, 1L, 0L, 0L, 3L, 7L, 
    41L, 46L, 22L, 2L, 2L, 1L, 1L, 3L, 11L, 40L, 54L, 20L, 5L, 
    2L, 0L, 0L, 0L, 1L, 14L, 16L, 40L, 21L, 5L, 6L, 2L, 0L, 1L, 
    2L, 9L, 15L, 6L, 2L, 0L, 1L, 0L, 0L, 0L, 0L, 0L)), row.names = c(NA, 
-143L), class = c("tbl_df", "tbl", "data.frame"))

Upvotes: 2

Views: 50

Answers (1)

jay.sf
jay.sf

Reputation: 72593

Actually your data is ordered "correctly" since the order of characters is alphabetically and thus different from that of numbers. Specifically "50" comes after "450". What you may do is to reorder your factor levels. For this we can use the first number which we get using gsub. I use a new variable x2 to show that the values won't change.

d$x2 <- factor(d$x, levels=levels(d$x)[order(as.numeric(gsub("( -.*)", "", levels(d$x))))])
d <- d[order(d$x2), ]
d
#         group         x    y1    y2    y3    y4        x2
# 1   2.5 - 3.0    0 - 50 20108 20658 20729 19436    0 - 50
# 2   3.0 - 3.5    0 - 50  8042  8171  8281  7767    0 - 50
# 3   3.5 - 4.0    0 - 50  3347  3552  3428  3251    0 - 50
# 4   4.0 - 4.5    0 - 50  1529  1717  1520  1414    0 - 50
# 5   4.5 - 5.0    0 - 50   690   894   853   697    0 - 50
# 6   5.0 - 5.5    0 - 50   340   377   398   356    0 - 50
# 7   5.5 - 6.0    0 - 50   121   127   160   125    0 - 50
# 8   6.0 - 6.5    0 - 50    63    38    57    48    0 - 50
# 9   6.5 - 7.0    0 - 50    24    10    10    22    0 - 50
# 10  7.0 - 7.5    0 - 50     3    12     4     7    0 - 50
# 11  7.5 - 8.0    0 - 50     0     4     5     4    0 - 50
# 92  2.5 - 3.0  50 - 100  3709  4116  4164  3838  50 - 100
# 93  3.0 - 3.5  50 - 100  1536  1520  1565  1525  50 - 100
# 94  3.5 - 4.0  50 - 100   419   485   497   450  50 - 100
# 95  4.0 - 4.5  50 - 100   165   185   178   162  50 - 100
# 96  4.5 - 5.0  50 - 100    63    64    69    72  50 - 100
# 97  5.0 - 5.5  50 - 100    39    58    52    43  50 - 100
# 98  5.5 - 6.0  50 - 100    19    25    29    27  50 - 100
# 99  6.0 - 6.5  50 - 100     6    10     7     6  50 - 100
# 100 6.5 - 7.0  50 - 100     4     7     3     1  50 - 100
# 101 7.0 - 7.5  50 - 100     3     2     3     0  50 - 100
# 12  2.5 - 3.0 100 - 150  1914  2819  2556  2035 100 - 150
# 13  3.0 - 3.5 100 - 150  1514  1815  1633  1645 100 - 150
# ...

Upvotes: 1

Related Questions