очень похожи: 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
- имеют порядок порядка 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
Единственный способ, которым я в настоящее время знал, чтобы сделать это было безумно утомительно. Я создал два подмножества dataframes на основе значения type
(один для x1, один для x2). Затем я создал новый dataframe вроде этого:
> 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 и даже не уверен, что искать!
Per ниже предложения, вот исходные данные:
> 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?» В моей второй таблице я не ошибался, показывая, как я хочу, чтобы все было упорядочено. Я хотел бы отсортировать по переменным y1 x1, что даст мне заказ для вектора 'attr'; то я хотел бы отсортировать x2 с помощью порядка сортировки 'attr'. Я думаю, что я могу использовать ваш код для этого. Дай мне секунду. – Hendy
Нет. Не получить его. Мне нужна эта первая половина, чтобы рассказать мне, в каком порядке она заканчивается, вставляя 'attrs' в (C, D, B, A); то мне нужно, чтобы вторая половина заказала себя так. Прямо сейчас, ваша функция дает мне x1 с порядком 'attrs' C, D, B, A, но x2 укладывается под ним в первоначальном порядке A, B, C, D. Надеюсь, это имеет смысл. – Hendy
@Hendy: ahhh ... ОК, теперь я понял, я отредактирую свой ответ – nico