如何在R中交换两列的值?

3
V1    V2
 5     6
 4     4
 2     5

我该如何交换这两个列向量的值,使结果如下所示:

?

V1    V2
 6     5
 4     4
 5     2

4
您可以使用colnames(x) <- c("V2", "V1")来重命名数据框x的列。 - akash87
@akash87 有没有一种方法可以在不更改名称的情况下交换值? - nathan
1
一旦重命名,我相信操作者需要重新排序它们以符合预期的输出。x <- x[rev(colnames(x))] - agenis
@agenis 我需要在colnames(x)中再次输入列名吗? - nathan
我不明白为什么你不接受重命名列,特别是当你有像dplyr包中的“rename_at”这样的优秀工具时,甚至可以接受正则表达式(我相信你的实际数据比V1和V2复杂得多...)。 - agenis
3个回答

6
最简单的方法可能是:
df[1:2] <- df[2:1]

那就是说,它交换了值但没有交换列名。
更加程序化地说:
c2swap <- c("V1", "V2")
df[c2swap] <- df[rev(c2swap)]

1
哇,这个完美地运行了,显然我一直在尝试使用if_else,但它的表现并不如预期!但是你的解决方案完美地解决了问题! - Jane Kathambi

1
最简单的方法是:

tmp <- df[1]
df[1] <- df[2]
df[2] <- tmp

0

我使用 data.table 进行编程,例如,dt。在我的情况下,

dt[1:2] <- dt[2:1]

交换第一行和第二行,同时

dt[,1:2] <- dt[,2:1]

交换第一列和第二列的值,但名称保持不变。


1
你能提供一个完整的示例(包括加载data.table等)吗? - JJJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接