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

我有两列,例如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
yaozhiying 回答:如何根据特定条件在R中交换两列?

如果只有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,a)
  y <- ifelse(b <= a,c)
  z <- data.frame(x,y)
  return(z) }

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

假设您的输入为

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
本文链接:https://www.f2er.com/3121470.html

大家都在问