我想在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 ...应该是一种方式。 ; - )
答案 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]