Сортировка фактора на основе значения в одном или нескольких других столбцах.

Я просмотрел ряд сообщений о факторах упорядочения, но не нашел совпадения для моей проблемы. К сожалению, мои знания R все еще довольно рудиментарны.

У меня есть подмножество каталога археологических артефактов, с которым я работаю. Я пытаюсь составить перекрестную таблицу типов диагностических исторических артефактов и мест тестирования. Достаточно легко с ddply или tapply.

Моя проблема в том, что я хочу отсортировать типы артефактов (фактор) по их средней диагностической дате (число/год), и я продолжаю получать их в алфавитном порядке. Я знаю, что мне нужно сделать его упорядоченным фактором, но не могу понять, как упорядочить его по значению года в другом столбце.

IDENTIFY                                      MIDDATE
engine-turned fine red stoneware              1769
white salt-glazed stoneware, scratch blue     1760
wrought nail, 'L' head                        1760
yellow lead-glazed buff earthenware           1732
...

Что необходимо упорядочить:

IDENTIFY                                      MIDDATE
yellow lead-glazed buff earthenware           1732
white salt-glazed stoneware, scratch blue     1760
wrought nail, 'L' head                        1760
engine-turned fine red stoneware              1769
...

Фактор (ИДЕНТИФИКАЦИЯ) необходимо упорядочить по Дате (СРЕДНЯЯ ДАТА). Я думал, что у меня есть это с

Catalog$IDENTIFY<-factor(Catalog$IDENTIFY,levels=Catalog$MIDDATE,ordered=TRUE)

, но получил предупреждение:

In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) 
else paste0(labels,: duplicated levels will not be allowed 
in factors anymore

IDENTIFY имеет ~ 130 уровней факторов, и многие имеют одинаковое значение для MIDDATE, поэтому мне нужно упорядочить IDENTIFY по MIDDATE и другому столбцу TYPENAME.

Немного подробнее:

У меня есть фрейм данных Каталог, который разбивается (т.е. str(Каталог)) следующим образом:

> str(Catalog)
'data.frame':   2211 obs. of  15 variables:
 $ TRENCH  : Factor w/ 7 levels "DRT 1","DRT 2",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ U_TYPE  : Factor w/ 3 levels "EU","INC","STP": 1 1 1 1 1 1 1 1 1 1 ...
 $ U_LBL   : Factor w/ 165 levels "001","005","007",..: 72 72 72 72 72 72 ...
 $ L_STRAT : Factor w/ 217 levels "#2-7/25","[3]",..: 4 4 4 4 4 4 89 89 89 89 ...
 $ START   : num  0 0 0 0 0 0 39.4 39.4 39.4 39.4 ...
 $ END     : num  39.4 39.4 39.4 39.4 39.4 39.4 43.2 43.2 43.2 43.2 ...
 $ Qty     : int  1 1 3 5 1 1 6 8 1 1 ...
 $ MATNAME : Factor w/ 6 levels "Ceramics","Chipped Stone",..: 1 1 1 5 5 6 ...
 $ TYPENAME: Factor w/ 9 levels "Architectural Hardware",..: 9 9 9 1 1 3 9 ...
 $ CATNAME : Factor w/ 32 levels "Biface","Bottle Glass",..: 24 29 29 6 24 ...
 $ IDENTIFY: Factor w/ 112 levels "amethyst bottle glass",..: 17 91 96 71 103 ...
 $ BEGDATE : int  1820 1820 1830 1835 1700 NA 1670 1762 1800 1720 ...
 $ ENDDATE : int  1900 1970 1860 1875 1820 NA 1795 1820 1820 1780 ...
 $ OCC_LBL : Ord.factor w/ 5 levels "Late 19th Century"<..: 2 1 2 2 4 5 4 3 ...
 $ MIDDATE : num  1860 1895 1845 1855 1760 ...

Мне нужно сделать IDENTIFYупорядоченный фактор и переупорядочить по MIDDATE-> TYPENAME-> alpha по IDENTIFY.

Чего я на самом деле не понимаю, так это того, как изменить порядок с помощью комбинированных заказов из нескольких столбцов.

Я бы просто сделал это в базе данных, но многое из того, что я запускаю, является взвешенными средними во всех видах перекрестных таблиц (например, взвешенные средние глубины под поверхностью земли для классов артефактов по местоположению)...

...выполнимо в Access, но грязно и непредсказуемо. Гораздо проще и чище управлять в R, но я бы не хотел вручную пересортировать полученные таблицы.

То, что я пытаюсь создать, представляет собой ряд вещей в следующем направлении:

>xtab.Catalog<-tapply(Catalog$Qty,list(Catalog$IDENTIFY,Catalog$TRENCH),sum)

IDENTIFY                        DRT1    DRT2    DRT3    DRT4    DRT5    DRT6
Staffordshire stoneware         4       NA      NA      NA      NA      NA  
undecorated delftware           6       4       NA      NA      NA      NA  
unidentified wrought nail       15      9       3       1       3       NA  
white salt-glazed stoneware     6       1       1       NA      2       1   
white salt-glazed scratch blue  1       NA      NA      NA      NA      NA  
white stoneware, slip-dipped    NA      NA      NA      NA      NA      NA  
wrought nail, 'L' head          2       NA      NA      NA      NA      NA  
wrought nail, 'rose' head       62      21      4       NA      1       1   
wrought nail, 'T' head          2       NA      1       NA      NA      1   
yellow lead-glazed              12      NA      NA      NA      1       3   
...

...но мне нужно, чтобы они сортировались в логическом (т.е. хронологическом/типовом) порядке, а не в алфавитном.

30
задан double-beep 31 January 2019 в 18:19
поделиться