Ответ 1
dfrm <- dfrm[c("piglet", "ssire", "dam", "tdate")]
ИЛИ
dfrm <- dfrm[ , c("piglet", "ssire", "dam", "tdate")]
У меня есть три переменные в фрейме данных и хотел бы поменять местами 4 столбца из
"dam" "piglet" "fdate" "ssire"
к
"piglet" "ssire" "dam" "tdate"
Есть ли способ сделать обмен, используя R?
Любая помощь будет очень оценена.
Баз
dfrm <- dfrm[c("piglet", "ssire", "dam", "tdate")]
ИЛИ
dfrm <- dfrm[ , c("piglet", "ssire", "dam", "tdate")]
d <- data.frame(a=1:3, b=11:13, c=21:23)
d
# a b c
#1 1 11 21
#2 2 12 22
#3 3 13 23
d2 <- d[,c("b", "c", "a")]
d2
# b c a
#1 11 21 1
#2 12 22 2
#3 13 23 3
или вы можете сделать то же самое, используя индекс:
d3 <- d[,c(2, 3, 1)]
d3
# b c a
#1 11 21 1
#2 12 22 2
#3 13 23 3
Чтобы обобщить другие сообщения, существует три способа изменения порядка столбцов и два способа указания индексации в каждом методе.
Учитывая примерный кадр данных
dfr <- data.frame(
dam = 1:5,
piglet = runif(5),
fdate = letters[1:5],
ssire = rnorm(5)
)
Ответ Kohske: вы можете использовать стандартную матричную индексацию, используя номера столбцов
dfr[, c(2, 4, 1, 3)]
или используя имена столбцов
dfr[, c("piglet", "ssire", "dam", "fdate")]
Ответ DWin и Gavin: кадры данных позволяют опустить аргумент строки при указании индекса.
dfr[c(2, 4, 1, 3)]
dfr[c("piglet", "ssire", "dam", "fdate")]
Ответ PaulHurleyuk: вы также можете использовать subset
.
subset(dfr, select = c(2, 4, 1, 3))
subset(dfr, select = c(c("piglet", "ssire", "dam", "fdate")))
Вы можете использовать аргумент subset 'select',
#Assume df contains "dam" "piglet" "fdate" "ssire"
newdf<-subset(df, select=c("piglet", "ssire", "dam", "tdate"))
Я заметил, что это почти 8-летний вопрос. Но для людей, которые начинают изучать R и могут наткнуться на этот вопрос, как и я, теперь вы можете использовать гораздо более гибкую функцию select()
из пакета dplyr
для выполнения операции замены следующим образом.
# Install and load the dplyr package
install.packages("dplyr")
library("dplyr")
# Override the existing data frame with the desired column order
df <- select(df, piglet, ssire, dam, tdate)
Этот подход имеет следующие преимущества:
select()
не требует, чтобы имена переменных были заключены в кавычки.starts_with()
, ends_with()
и т.д., Чтобы выбрать несколько столбцов без необходимости называть каждый столбец и упорядочивать их.Я быстро написал функцию, которая берет вектор v и индексы столбцов a и b, которые вы хотите поменять местами.
swappy = function(v,a,b){ # where v is a dataframe, a and b are the columns indexes to swap
name = deparse(substitute(v))
helpy = v[,a]
v[,a] = v[,b]
v[,b] = helpy
name1 = colnames(v)[a]
name2 = colnames(v)[b]
colnames(v)[a] = name2
colnames(v)[b] = name1
assign(name,value = v , envir =.GlobalEnv)
}