很相似: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