注文要因についていくつかの投稿を見てきましたが、私の問題にはあまり合致しません。残念ながら、私のRの知識はまだかなり初歩的です。R - 1つまたは複数の他の列の値に基づいて係数を注文する
私は、作業している考古学的人工物カタログのサブセットを持っています。私は、診断的な過去の成果物のタイプとサイトのテスト場所をクロス集計しようとしています。 ddplyまたはtapplyで十分に簡単です。
私の問題は、平均診断日(数字/年)でアーティファクトタイプ(因子)をソートしたいのですが、アルファベット順に並べています。私はそれを順序付けられた要素にする必要があることを知っていますが、もう1つの列の年の値でどのように注文するかを理解することはできません。
注文する必要が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に同じ値を持っているので、私はMIDDATEでIDENTIFY注文する必要があり、別の列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 by IDENTIFY
。
私が本当に得意ではないのは、複数の列から複数の注文を組み合わせて並べ替える方法です。
私はdbでこれをやっていますが、私が実行していることの多くは、あらゆる種類のクロス集計(例えば、ロケーション別のアーティファクトクラスの地面下の加重平均深度)にあります。
...アクセス可能ですが、乱雑で予測不能です。 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
...
...しかし、私は彼らが代わりにアルファベットの論理(すなわち、時系列/タイプ)の順序でソートする必要があります。
ありがとうございました。
受賞ソリューションであることが判明:
Catalog$IDENTIFY = factor(Catalog$IDENTIFY, levels =
+ Catalog$IDENTIFY[order(Catalog$MIDDATE, Catalog$MATNAME,
+ Catalog$TYPENAME, Catalog$CATNAME, Catalog$IDENTIFY)], ordered=TRUE)
Catalog$IDENTIFY <- factor(Catalog$IDENTIFY[,drop=TRUE])
str(Catalog$IDENTIFY)
Ord.factor w/ 112 levels "brown-dotted yellow lead-glazed buff earthenware"<..: 63 85 48 59 17 112 4 24 36 8 ...
は統計に ')(関数'リオーダーを見てくださいパッケージ(すなわち、ベースR)。 – Andrie
再注文(カタログ$ IDENTIFY、カタログ$ MIDDATE) 'を試みましたが、重複レベルとIDENTIFYに関するすべての警告が「NA」になりました... – Scard
再現可能なコードなしであなたを助けるのは少し難しいです。再現可能な例を試してみることができますか?見てみましょうか? – Andrie