Я просмотрел несколько постов о факторах заказа, но не нашел соответствия своей проблеме. К сожалению, мое знание 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
...
Коэффициент (IDENTIFY) должен быть упорядочен по дате (MIDDATE). Я думал, что у меня это было с
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.
Еще немного подробнее:
У меня есть Catalog
, который разбивается (т.е. str(Catalog)
) как:
> 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
...
... но мне нужно, чтобы они сортировались в логическом (т.е. хронологическом/типовом) порядке, а не в алфавитном порядке.