5

我想交换 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... 应该是一种方法。;-)

4

2 回答 2

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
于 2013-08-09T01:39:07.650 回答
2

这个:

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

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

names(dd)[2:3] <- names(dd)[3:2]
于 2013-08-09T00:50:03.700 回答