2016-08-10 4 views
0

Когда я пытаюсь частично упорядочить столбцы с помощью "[", значения меняются, но имена столбцов не перемещаются. См. Пример ниже:Частичное переупорядочение столбцов кадра данных не перемещает имена столбцов

x = data.frame(x1 = c(1,2,3), x2 = c(2,3,4), x3 = c("e","e","e"), x4 = c("f","f","f")) 

x 
#x1 x2 x3 x4 
#1 2 e f 
#2 3 e f 
#3 4 e f 

x[, c(3,4)] = x[, c(4,3)] 
#x1 x2 x3 x4 
#1 2 f e 
#2 3 f e 
#3 4 f e 

Любая идея относительно того, почему имена столбцов не перемещаются и как просто решить это?

+2

Переключение имен может быть более разумным. 'names (x) [c (3,4)] <- names (x) [c (4,3)]' – Psidom

+0

@DavidArenburg Я не думаю, что это обман ссылки – akrun

+1

@DavidArenburg Это не дублировать вообще. Все вопросы, связанные с перестановкой столбцов, не совпадают. –

ответ

0

Одним из вариантов является cbind

x1 <- cbind(x[1:2], x[4:3]) 
x1 
# x1 x2 x4 x3 
#1 1 2 f e 
#2 2 3 f e 
#3 3 4 f e 

Или мы можем также использовать числовой порядок


Делая задание, мы изменяем только значения, а не имена столбцов. Значения столбца изменяются по положению, но не будут переведены путем замены имен столбцов, поскольку имя столбца фиксировано для этой позиции.

+0

Это умно, спасибо. Однако прежде чем я помечаю это как ответ, не могли бы вы рассказать о том, почему то, что я писал, изменяет значения, когда 'x [, c (4,3)]' явно содержит имя столбцов. –

+0

@YohanObadia Назначение меняет только значения столбцов путем их замены. Если нам нужно изменить имена, это нужно сделать отдельно, поскольку имя столбца является своеобразным идентификатором для этого столбца. – akrun

0

Попробуйте

x <- x[,c(1,2,4,3)] 
+0

Это работает, но это не совсем то, что я хотел. Мне очень любопытно, почему это не работает так, как я это делаю. Ответ @akrun решает это немного более полно. –

Смежные вопросы