【发布时间】:2021-10-24 17:27:47
【问题描述】:
我有一个数据框(示例数据):
id <- c(1, 2, 3)
ex1 <- c(0.8, 0.2, 0.3)
ex2 <- c(0.1, 0.4, 0.04)
ex3 <- c(0.04, 0.3, 0.5)
ex <- c(1, 1, 1)
ran <- c(0.5, 0.7, 0.6)
dat <- data.frame(id, ex1, ex2, ex3, ex, ran)
dat
id ex1 ex2 ex3 ex ran
1 1 0.8 0.10 0.04 1 0.5
2 2 0.2 0.40 0.30 1 0.7
3 3 0.3 0.04 0.50 1 0.6
我想用 if-else-condition 更改“ex”的值。当“ran”小于或等于 ex$ 变量的最大值时,“ex”应更改为 5(任意)。它也应该大于其他 ex$ 变量,但它们应该被排序 - 第二大值添加到最小值。以下是所有 id 的示例,从 id 1 开始:
dat$ex <- ifelse(dat$ran <= dat$ex1 & dat$ran > dat$ex1 + dat$ex2, 5, dat$ex)
这里ex1是最大值,其次是ex1和ex2。
对于 id 2,应该是:
dat$ex <- ifelse(dat$ran <= dat$ex2 & dat$ran > dat$ex3 + dat$ex1, 5, dat$ex)
这里ex2是最大值,其次是ex3,然后是ex1。
对于 id 3:
dat$ex <- ifelse(dat$ran <= dat$ex3 & dat$ran > dat$ex1 + dat$ex2, 5, dat$ex)
这里ex3是最大值,其次是ex1,然后是ex2。
现在的问题是:如何概括 ifelse 语句?注意:重要的是,两个较小值的总和按照示例中的实现方式执行。我需要通过 id 在 ifelse 中识别 ex1、ex2 和 ex3 的排序值。
【问题讨论】:
标签: r if-statement