Как упорядочить столбец dataframe с целочисленными строками, подобными строкам?

#r

#r

Вопрос:

У меня есть фрейм данных в следующем формате:

 <year joined>, <win streak>, <points>
2012           0-10 days     xxx
2013           0-10 days     xxx
2014           0-10 days     xxx
2012           1-2 years     xxx
2013           1-2 years     xxx
2014           1-2 years     xxx
2012           11-50 days    xxx
2013           11-50 days    xxx
2014           11-50 days    xxx
...            
 

Проблема в том, что столбец «серия побед» упорядочен неправильно, потому что сортировка по строке составляет «1-2 года» до «11-50 дней».

Каков был бы эффективный способ упорядочить этот фрейм данных, чтобы присоединенный год по-прежнему соответствовал порядку 2012-2014 годов, но чтобы группы победных серий упорядочивались в порядке возрастания, даже если они являются скобками и не могут быть представлены как истинные целые числа.

Ответ №1:

Генерировать поддельные данные

 z = as.factor(sample(c("0-10 Days", "11-50 Days", "1-2 Years"), 20, replace = TRUE))
z 
   [1] 0-10 Days  0-10 Days  11-50 Days 0-10 Days  0-10 Days  11-50 Days 11-50 Days 1-2 Years 
   [9] 11-50 Days 1-2 Years  0-10 Days  11-50 Days 11-50 Days 0-10 Days  1-2 Years  11-50 Days
   [17] 1-2 Years  1-2 Years  0-10 Days  0-10 Days 
 

Определение уровней

 levels(z) = c("0-10 Days", "11-50 Days", "1-2 Years")
sort(z)
   [1] 0-10 Days  0-10 Days  0-10 Days  0-10 Days  0-10 Days  0-10 Days  0-10 Days  0-10 Days 
   [9] 11-50 Days 11-50 Days 11-50 Days 11-50 Days 11-50 Days 11-50 Days 11-50 Days 1-2 Years 
   [17] 1-2 Years  1-2 Years  1-2 Years  1-2 Years 
   Levels: 0-10 Days 11-50 Days 1-2 Years
 

Если вы хотите отслеживать время, вы можете POSIXlt вместо этого использовать class .