Очень похоже: Как отсортировать фрейм данных в 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, но только по значениям y1 для x1
- имеет порядок x2 в зависимости от порядка, в котором находится attr после выполнения предыдущего шага
Другими словами, для этого примера я хочу получить результат:
> 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")