首页 > 解决方案 > 为两个变量的一系列值创建“if...then”语句的代码

问题描述

我正在尝试创建一个“ if... then”语句,R其中两个变量G1G2位于给定数据集中的值范围内。例如,我想测试的“if...then”场景是:

if (200 > G1 > -100) and (200 > G2 > -100), then G = mean(G1,G2)

我的场景代码如下所示:

if(200 > G1 > -100 & 200 > G2 > -100) {G = mean(G1,G2)}

我得到的错误是:

Error: unexpected '>' in "        if(200 > G1 >"

任何帮助将非常感激!谢谢

更新:

G1 和 G2 是数据框中的两个值列表

这是一个例子:

G1 = 101, G2 = 2

预期输出:G = mean(101,2) = 51.5

标签: rif-statementrange

解决方案


R语法不正确。它不同于数学语法

if(G1 > -100 &  G1< 200 & G2 > -100 & G2 < 200) G <- mean(c(G1, G2))

-输出

G
[1] 137.5

话虽如此,if/else仅当“G1”、“G2”为length1 且不大于 1 时才起作用,因为if/else未矢量化,即如果长度大于 1,则使用矢量化ifelse或创建逻辑索引,将“G1”的值子集', 'G2' 基于该索引并得到mean

G1 <- c(125, 135, 142, 215)
G2 <- c(-123, 122, 180, 140)
i1 <- G1 > -100 &  G1< 200 & G2 > -100 & G2 < 200
 mean(c(G1[i1], G2[i1]))
[1] 144.75

或者,如果我们对mean满足条件的相应元素感兴趣,那么cbind对象到 a matrix,用 'i1' 对行进行子集化并得到rowMeans

rowMeans(cbind(G1, G2)[i1,])
[1] 128.5 161.0

数据

G1 <- 150
G2 <- 125

推荐阅读