数据帧列的部分重新排序不会移动列的名称
当我尝试使用"["
对列进行部分重新排序时,值将被交换,但列名不会移动。看到下面的例子:数据帧列的部分重新排序不会移动列的名称
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
任何想法,为什么列的名称不移动,以及如何解决这个问题?
一种选择是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
或者我们也可以用数字排序
通过做任务,我们只改变值,而不是列名。列值根据位置而改变,但不会通过交换列名来进行转换,因为列名对于该位置是固定的。
这很聪明,谢谢。然而,在我将其标记为回答之前,请您详细说明为什么我写的只是在'x [,c(4,3)]'明确包含列名时才改变值。 –
@YohanObadia该分配仅通过交换来更改列的值。如果我们需要更改名称,则必须单独完成,因为列名称是该列的标识。 – akrun
试试这个
x <- x[,c(1,2,4,3)]
这有效,但它不是我想要的。我很好奇为什么它不能像我这样做。 @akrun回答更彻底地解决它。 –
切换名称可能是比较合理的。 'name(x)[c(3,4)] Psidom
@DavidArenburg我不认为这是链接的骗局 – akrun
@DavidArenburg这不是完全相同。所有与换柱相关的问题都不相同。 –