IF ... ELSE R协助

时间:2019-02-26 12:00:37

标签: r if-statement

我试图在R中编写If ... Else语句,但遇到了一些困难。我有一个包含20年数据的数据集,并且需要根据变量A的特定年份(VariableB)来调整VariableA的值。我尝试使用If ... Else语句,但我不断得到:

VariableA VariableB Multiplier VariableC 100 1998 1.4 140 100 1998 1.4 140 100 1999 1.7 170 100 1999 1.7 170 100 2000 2.0 200 100 2000 2.0 200

错误:“”中的意外“}”

我一直试图开始工作的代码如下:

Data <- function(DMG, YEAR){
if(YEAR = "1998"){
Data$TotDmg2017 <- Data$DMG * 1.433988335
}
}

我不确定这是否是正确的代码,或者这是否是最有效的方法。我不熟悉循环和If ... Else语句,因此将不胜感激。

1 个答案:

答案 0 :(得分:1)

这是使用tidyverse的一种方法:

library(tidyverse)

df <- tribble(~varA, ~varB, ~multiplier, ~varC,
              100,1998,1.4,140,
              100,1998,1.4,140,
              100,1999,1.7,170,
              100,1999,1.7,170,
              100,2000,2.0,200,
              100,2000,2.0,200
              )

df <- df %>%
  mutate(varA = ifelse(varB == 1998, varA * 1.433988335, varA))

输出:

# A tibble: 6 x 4
   varA  varB multiplier  varC
  <dbl> <dbl>      <dbl> <dbl>
1  143.  1998        1.4   140
2  143.  1998        1.4   140
3  100   1999        1.7   170
4  100   1999        1.7   170
5  100   2000        2     200
6  100   2000        2     200

感谢@gregor提醒我需要解释代码。

我想在开始发言时说,我只是提出一种解决当前问题的替代方法。如果不建议使用此方法,请随时忽略它。

mutate()命令是在tidyverse中创建列的语法方式。本质上,我正在创建一个名为varA的新列,它将基本上替换现有的varA列。

在原始请求中,您使用了if(){}else(){}语句。两者均有效。为简单起见,我使用了ifelse()函数。该函数内置在R的基础中,我发现它更易于阅读。个人喜好。

ifelse()的语法为ifelse(test, yes, no)(根据帮助页面)。基本上,如果您的测试条件为true,则将执行您在“ yes”参数中输入的任何内容,否则将执行“ no”参数。

在我提供的示例中,我仅使用了您应用的类似测试条件。如果varB值恰好等于1998,则它将varA中的现有值乘以1.4339。