r - R:当max <= min时,如何替换(切换)数据框中连续的最大值和最小值?
问题描述
仅当 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]))
数据
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"))
推荐阅读
- python - Dash 引导组件未显示
- python - 如何通过迭代替换数据框列的某些值
- math - 我可以通过将两个数字都转换为基数 10,添加它们然后转换为所需的基数来添加不同基数吗?
- python - 基于 Django 类的 UpdateView 与多个上传文件的表单
- java - Spring Boot + Hibernate + Thymeleaf 延迟加载异常
- matlab - 我可以在 nD 矩阵上使用 mldivide “\” 而不在 MATLAB 中使用 for 循环吗?
- javascript - 打开多个网址的书签不起作用
- ios - UIActivityViewController - 没有共享选项 - Swift 5
- r - 嵌套 for 循环导致:[<-.data.frame`(`*tmp*` 替换有 x 行,数据有 y
- html - HTML5 下载属性