Когда вы конвертируете .1 или 1/10 в base 2 (двоичный), вы получаете повторяющийся шаблон после десятичной точки, точно так же, как пытаетесь представить 1/3 в базе 10. Значение не является точным, и поэтому вы можете 't делать точную математику с ней, используя обычные методы с плавающей запятой.
Вы можете использовать order
на names
и использовать это для упорядочения столбцов при подмножестве:
test[ , order(names(test))]
A B C
1 4 1 0
2 2 3 2
3 4 8 4
4 7 3 7
5 8 2 8
. В соответствии с вашим собственным определенным порядком вам нужно будет определить свое собственное отображение имена для заказа. Это будет зависеть от того, как вы хотели бы это сделать, но замена любой функции на это с помощью order
выше должна дать желаемый результат.
Вы можете, например, взглянуть на строки кадра данных в соответствии с целевым вектором, который задает желаемый порядок , т. е. вы можете match
ваш кадр данных names
против целевого вектора, содержащего нужный порядок столбцов.
Вот обязательный ответ dplyr
, если кто-то захочет сделать это с помощью трубы.
test %>%
select(sort(names(.)))
test = data.frame(C=c(0,2,4, 7, 8), A=c(4,2,4, 7, 8), B=c(1, 3, 8,3,2))
Использование простой следующей замены функции может выполняться (но только если в кадре данных не много столбцов):
test <- test[, c("A", "B", "C")]
для других:
test <- test[, c("B", "A", "C")]
test[,sort(names(test))]
сортировка по именам столбцов может работать легко.
Вот что я обнаружил, чтобы достичь аналогичной проблемы с моим набором данных.
Во-первых, сделайте то, что упомянул выше, например,
test[ , order(names(test))]
. Во-вторых, используйте функцию everything () в dplyr для перемещения определенных интересующих столбцов (например, «D», G "," K ") в начале фрейма данных, поместив алфавитно упорядоченные столбцы после них.
select(test, D, G, K, everything())