很相似:How to sort dataframe in R with specified column order preservation?[R排序/順序堆積變量
我的數據的一個例子:
> dat
type attr y1
1 x1 A 0.25
2 x1 B 0.19
3 x1 C 0.06
4 x1 D 0.13
5 x2 A 0.25
6 x2 B 0.00
7 x2 C 0.19
8 x2 D 0.00
我創建了幾個不同的情節和希望做到以下幾點:
- 按y1排序,但僅根據x1的y1值
- 按照attr在執行完上一步之後的任何順序排列本身的x2順序
換句話說,在這個例子中,我想要的結果:
> datsorted
type attr y1
1 x1 C 0.06
2 x1 D 0.13
3 x1 B 0.19
4 x1 A 0.25
5 x2 C 0.19
6 x2 D 0.00
7 x2 B 0.00
8 x2 A 0.25
我現在知道這樣做是瘋狂繁瑣的唯一途徑。我根據type
(一個用於x1,一個用於x2)的值創建了兩個子集數據框。然後,我創建了一個新的數據幀是這樣的:
> beside
t1 t2 attr x1y1 x2y1
1 x1 x2 A 0.25 0.25
2 x1 x2 B 0.19 0.00
3 x1 x2 C 0.06 0.19
4 x1 x2 D 0.13 0.00
這樣我可以通過X1Y1排序,並把一切都在一起......但後來我不得不重新拆分了它在長期的形式情節。一定有更好的方法。對不起,如果我錯過了另一個答案;我比較新的R,我甚至不知道要搜索什麼!
每下面的建議,這裏的原始數據:
> dput(dat)
structure(list(type = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L), .Label = c("x1", "x2"), class = "factor"), attr = structure(c(1L,
2L, 3L, 4L, 1L, 2L, 3L, 4L), .Label = c("A", "B", "C", "D"), class = "factor"),
y1 = c(0.25, 0.19, 0.06, 0.13, 0.25, 0, 0.19, 0)), .Names = c("type",
"attr", "y1"), row.names = c(NA, -8L), class = "data.frame")
感謝協助。我簡化了上面的內容,並按要求添加了「dput(dat)」。我會問,但現在知道答案後,試試這個,「什麼排序數據的第二部分不是x1?」我在第二張表格中沒有輸入錯誤信息,顯示我希望如何分類。我想按x1的y1變量排序,這會給我一個'attr'向量的順序;那麼我想按照「attr」排序順序對x2進行排序。不過,我想我可以使用你的代碼來做到這一點。稍等片刻。 – Hendy 2012-03-08 18:54:01
沒有。沒有得到它。我需要在上半場告訴我,把'attrs'放到(C,D,B,A)結束的順序是什麼?那麼我需要那個下半部分來訂購它自己。現在,你的函數給了我x1'attrs'的順序C,D,B,A,但是x2在原來的A,B,C,D順序中堆疊在它下面。希望這是有道理的。 – Hendy 2012-03-08 19:01:24
@ Hendy:ahhh ...好的,現在我明白了,我會編輯我的答案 – nico 2012-03-08 20:41:52