如何根据特定条件交换 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 列,pmin
和 pmax
是你的朋友。
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
我有两列,比如 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 列,pmin
和 pmax
是你的朋友。
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