我试图在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语句,因此将不胜感激。
答案 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。