在没有完全重新分配的情况下更改数据框中的列位置

时间:2013-08-09 00:42:43

标签: r

我想在data.frame中交换两列。我知道我可以这样做:

dd <- dd[c(1:4, 6:5, 7:10)]

但是我发现它不优雅,可能很慢(?)而且不是程序友好的(你需要知道length(dd),甚至在某些情况下,如果交换列接近或不接受该值......) 如果不重新分配整个数据框,有没有简单的方法呢?

dd[2:3] <- dd[3:2]

原来是非常“有损”,因为[ <-只涉及值,而不是属性。例如:

(dd <- data.frame( A = 1:4, Does = 'really', SO = 'rock' ) )
dd[3:2] 
dd[2:3] <- dd[2:1]
print(dd)

列名显然没有翻转......

有什么想法吗?我还可以在我的长列表中添加一个小的自定义函数,但grrr ...应该是一种方式。 ; - )

2 个答案:

答案 0 :(得分:3)

这不是一个单一的功能,而是相对简单:

dd[replace(seq(dd), 2:3, 3:2)]

  A   SO   Does
1 1 rock really
2 2 rock really
3 3 rock really
4 4 rock really

答案 1 :(得分:2)

此:

dd[,2:3] <- dd[,3:2]

有效,但您还必须更新名称:

names(dd)[2:3] <- names(dd)[3:2]