1

Sorting has been discussed quite a bit here, but I have a particular problem. I have a data frame (df) with several columns. All the observations belong to one of three types, say C1, C2, and C3. Of the various columns, one contains a value which I will call frequency (f). Example df:

  Type  freq  Val 
   C3.   0.34.  10-A
   C1.   0.90.  4-A
   C2.   0.40.  5-B
   C1.   0.65.  3-C
   C2.   0.77.  5-D
   C3.   0.11.  5-D

I need to sort this table so that the primary key is the Type, and secondary key is the frequency. However, and here’s my problem, they need to be sorted by a particular order of type. I need them by C1, C3, C2. So the final table looks like this:

   Type  freq  Val
   C1.   0.90.  4-A
   C1.   0.65.  3-C
   C3.   0.34.  10-A
   C3.   0.11.  5-D
   C2.   0.77.  5-D
   C2.   0.40.  5-B

Is there a way to do this? To pick the particular ordering scheme of the column Type. Any suggestion is much appreciated. Thanks

1 Answer 1

1

We can convert the 'Type' to factor with levels specified in the custom order

library(dplyr)
df1 %>% 
   arrange(factor(Type, levels = c('C1.', 'C3.', 'C2.')), desc(freq))
#  Type  freq  Val
#1  C1. 0.90.  4-A
#2  C1. 0.65.  3-C
#3  C3. 0.34. 10-A
#4  C3. 0.11.  5-D
#5  C2. 0.77.  5-D
#6  C2. 0.40.  5-B

Or using data.table

library(data.table)
setDT(df1)[, Type := factor(Type,  levels = c('C1.', 'C3.', 'C2.'))]
setorder(df1, Type, -freq)

In base R, we can do

df1[order(factor(df1$Type, levels = c('C1.', 'C3.', 'C2.')), -df1$freq),]

data

df1 <- structure(list(Type = c("C3.", "C1.", "C2.", "C1.", "C2.", "C3."
), freq = c("0.34.", "0.90.", "0.40.", "0.65.", "0.77.", "0.11."
), Val = c("10-A", "4-A", "5-B", "3-C", "5-D", "5-D")), 
  class = "data.frame", row.names = c(NA, 
-6L))
Sign up to request clarification or add additional context in comments.

3 Comments

I’m working with the “dplyr” library. My final df is arranging freq correctly, but the order of the Type is yielding C1, C2, C3, and not C1, C3, C2. I wonder if there’s something missing.
@Orion11 If you neeed to change the column, assign the factor output to that column and then it should work
Ok. I got it to work. I was missing the "$Type" part. Thank you very much.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.