Как поменять местами два столбца в R на основе определенного условия? - PullRequest
1 голос
/ 11 ноября 2019

У меня есть два столбца, скажем, a & b, и я должен поменять местами значения a & b, если значение в столбце b больше, чем значение в столбце a.

Я написалфункция, чтобы поменять переменную, если условие выполнено*

Ответы [ 3 ]

4 голосов
/ 12 ноября 2019

Если это только 2 столбца, pmin и pmax ваши друзья здесь.

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

Если это более 2 столбцов, то применение сортировки лучше масштабируется.

2 голосов
/ 12 ноября 2019

Решение Грегора - лучшее, но я подумал, что добавлю еще.

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
1 голос
/ 11 ноября 2019

Предполагая, что ваш ввод задан как

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
...