如果......在R援助中

问题描述 投票:0回答:1

我试图在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语句所以任何帮助都会非常感激。

r if-statement
1个回答
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)(根据帮助页面)。基本上,如果您的测试条件为真,那么无论您在“是”参数中放置什么都将执行,否则将执行“否”参数。

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

© www.soinside.com 2019 - 2024. All rights reserved.