如何根据特定条件交换 R 中的两列?

How to swap two columns in R based on a specific condition?

我有两列,比如 a 和 b,如果 b 列中的值大于 a 列中的值,我必须交换 a 和 b 的值。

我写了一个函数,如果满足条件就交换变量

a     b
110   70
120   80 
80    110 

swap_if<- function (a, b,missing=NA) 
{
  if(b>a)
  {
    a = a + b
    b = a - b
    a = a - b
  }
}  


swap_if(a,b)



输出应为:

a     b
110   70
120   80 
110   80 

但是我遇到了一个错误

the condition has length > 1 and only the first element will be used

假设您的输入是

df <- data.frame(a = c(110,120,80), b = c(70,80,110))

那么下面可以给出预期的输出:

df_swap <- as.data.frame(t(apply(df, 1, function(v) sort(v,decreasing = T))))
colnames(df_swap) <- names(df)

这样

> df_swap
   a b
1 110 70
2 120 80
3 110 80

如果只有 2 列,pminpmax 是你的朋友。

temp_min = pmin(df$a, df$b)
df$a = pmax(df$a, df$b)
df$b = temp_min

如果超过 2 列,则应用排序的缩放比例更好。

Gregor 的解决方案是最好的,但我想添加一个额外的。

swap_if <- function (a, b, missing = NA) {
  c <- a
  x <- ifelse(b > a, b, a)
  y <- ifelse(b <= a, b, c)
  z <- data.frame(x, y)
  return(z) }

swap_if(a, b)
    x  y
1 110 70
2 120 80
3 110 80