我试图在R中写一个If ... Else语句,我遇到了一些困难。我有一个拥有20年数据的数据集,并且需要根据它们所在的特定年份调整VariableA的值(VariableB)。我尝试使用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语句所以任何帮助都会非常感激。
这是使用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)
(根据帮助页面)。基本上,如果您的测试条件为真,那么无论您在“是”参数中放置什么都将执行,否则将执行“否”参数。
在我提供的示例中,我只使用了您应用的类似测试条件。如果varB值恰好等于1998,那么它将采用varA中的现有值并将其乘以1.4339。