R:当max <= min时,如何替换(切换)数据框中一行的max和min值? [英] R: How to to replace(switch) the max and min values in a row in a dataframe when max &lt;= min?

查看:77
本文介绍了R:当max <= min时,如何替换(切换)数据框中一行的max和min值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

仅当max< = min时,才如何替换(切换)此数据框中每一行的max和min值?

How we can replace(switch) the max and min values in each row in this dataframe ONLY if max <= min ?

> my_data

   year month day   max      min
1  2019     1   1   20.4   -24.4
2  2019     1   2   12.9   -20.4
3  2019     1   3  -27.1    10.3
4  2019     1   4  -20.8    11.0
5  2019     1   5  -16.2    -8.9

结果应该是这样的:

> my_data

   year month day   max      min
1  2019     1   1   20.4   -24.4
2  2019     1   2   12.9   -20.4
3  2019     1   3   10.3   -27.1
4  2019     1   4   11.0   -20.8
5  2019     1   5   -8.9   -16.2

谢谢提前。

推荐答案

一个选项是 pmax / pmin

library(dplyr)
my_data %>% 
    mutate(maxnew =  pmax(max, min), minnew = pmin(max, min))  %>%
    select(year, month, day, max = maxnew, min = minnew)
#  year month day  max   min
#1 2019     1   1 20.4 -24.4
#2 2019     1   2 12.9 -20.4
#3 2019     1   3 10.3 -27.1
#4 2019     1   4 11.0 -20.8
#5 2019     1   5 -8.9 -16.2






或者 base R

nm1 <- c('max', 'min')
my_data[nm1] <- t(apply(my_data[nm1], 1, sort))[, 2:1]






或使用 pmax / pmin

my_data[nm1] <- lapply(list(pmax, pmin), function(f) do.call(f, my_data[nm1]))



数据



data

my_data <- structure(list(year = c(2019L, 2019L, 2019L, 2019L, 2019L), month = c(1L, 
1L, 1L, 1L, 1L), day = 1:5, max = c(20.4, 12.9, -27.1, -20.8, 
-16.2), min = c(-24.4, -20.4, 10.3, 11, -8.9)), 
class = "data.frame", row.names = c("1", 
"2", "3", "4", "5"))

这篇关于R:当max <= min时,如何替换(切换)数据框中一行的max和min值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆