Как изменить этот вход (с последовательностью: время, вход, выход, файлы):
Time In Out Files
1 2 3 4
2 3 4 5
К этому выводу (с последовательностью: время, out, in, файлы)?
Time Out In Files
1 3 2 4
2 4 3 5
Вот фиктивные данные R:
table <- data.frame(Time=c(1,2), In=c(2,3), Out=c(3,4), Files=c(4,5))
table
## Time In Out Files
##1 1 2 3 4
##2 2 3 4 5
help(Extract)
также известный как?'['
Ответы:
Ваш фрейм данных имеет четыре столбца, как это
df[,c(1,2,3,4)]
. Обратите внимание, что первая запятая означает сохранить все строки, а 1,2,3,4 относится к столбцам.Чтобы изменить порядок, как в предыдущем вопросе, сделайте
df2[,c(1,3,2,4)]
Если вы хотите вывести этот файл в формате csv, выполните
write.csv(df2, file="somedf.csv")
источник
df[,c(1,3,2,4:ncol(df))]
когда вы не знаете, сколько столбцов.источник
data <- data[c(1,3,"Var1", 2)]
?c(1,3,"Var1", 2)
будет читаться так,c("1","3","Var1", "2")
потому что векторы могут содержать данные только одного типа, поэтому типы повышаются до наиболее общего существующего типа. Поскольку нет столбцов с именами символов «1», «3» и т. Д., Вы получите «неопределенные столбцы».list(1,3,"Var1", 2)
сохраняет значения без продвижения типа, но вы не можете использоватьlist
в приведенном выше контексте.mtcars[c(1,3,2)]
подмножество? Я бы ожидал ошибку, связанную с неправильными размерами или аналогичными ... Разве это не должно бытьmtcars[,c(1,3,2)]
?Вы также можете использовать функцию подмножества:
Вы должны лучше использовать оператор [], как и в других ответах, но может быть полезно знать, что вы можете выполнить подмножество и операцию переупорядочения столбцов в одной команде.
Обновить:
Вы также можете использовать функцию выбора из пакета dplyr:
Я не уверен в эффективности, но благодаря синтаксису dplyr это решение должно быть более гибким, особенно если у вас много столбцов. Например, следующее упорядочит столбцы набора данных mtcars в обратном порядке:
И следующее будет переупорядочивать только некоторые столбцы и отбрасывать другие:
Узнайте больше о синтаксисе выбора dplyr .
источник
subset()
, см. Этот вопрос .everything()
особенно удивительным;mtcars %>% select(wt, gear, everything())
Как уже упоминалось в этом комментарии , стандартные предложения по переупорядочению столбцов в a
data.frame
обычно громоздки и подвержены ошибкам, особенно если у вас много столбцов.Эта функция позволяет переставить столбцы по позициям: указать имя переменной и желаемую позицию, и не беспокоиться о других столбцах.
Теперь запрос OP становится таким простым:
Чтобы дополнительно поменять местами столбцы
Time
иFiles
столбцы, вы можете сделать это:источник
dplyr
Решение (частьtidyverse
набора пакетов) является использованиеselect
:источник
select(iris, Species, everything())
. Также обратите внимание, что цитаты не нужны.everything()
включите их, как в комментарииdplyr
Этоgroup
также переставит переменные, так что будьте внимательны при использовании этого в цепочке.Может быть, это совпадение, что в нужном порядке столбцов имена столбцов располагаются в алфавитном порядке по убыванию. Так как это так, вы могли бы просто сделать:
Это то, что я использую, когда у меня большие файлы со многими столбцами.
источник
!! WARNING !!
data.table
превращаетсяTARGET
в вектор типа int:TARGET <- TARGET[ , order(colnames(TARGET), decreasing=TRUE)]
чтобы это исправить:TARGET <- as.data.frame(TARGET)
TARGET <- TARGET[ , order(colnames(TARGET), decreasing=TRUE)]
Вы можете использовать пакет data.table :
Как изменить порядок столбцов data.table (без копирования)
источник
У трех самых популярных ответов есть слабость.
Если ваш фрейм данных выглядит так
тогда это плохое решение для использования
Это делает работу, но вы только что ввели зависимость от порядка столбцов в вашем входе.
Этого стиля хрупкого программирования следует избегать.
Явное именование столбцов - лучшее решение
Кроме того, если вы намереваетесь использовать свой код в более общих условиях, вы можете просто
что также довольно приятно, потому что полностью изолирует литералы. Напротив, если вы используете dplyr
select
тогда вы будете настраивать тех, кто будет читать ваш код позже, включая вас самих, для некоторого обмана. Имена столбцов используются как литералы, но не отображаются в коде как таковые.
источник
dplyr
Версия1.0.0
включает в себяrelocate()
функцию легкого изменения порядка столбцов:или
источник
источник
setcolorder
.Единственный, кого я хорошо видел, это отсюда .
Используйте как это:
Работает как шарм.
источник