如果…在R的帮助下

如果…在R的帮助下,r,if-statement,R,If Statement,我正试图用R写一个If…Else语句,我遇到了一些困难。我有一个数据集,有20年的数据,变量a的值需要根据变量B中的具体年份进行调整。我尝试使用If…Else语句,但我一直得到: 变量A变量B乘数变量C 100 1998 1.4 140 100 1998 1.4 140 100 1999 1.7 170 100 19

我正试图用R写一个If…Else语句,我遇到了一些困难。我有一个数据集,有20年的数据,变量a的值需要根据变量B中的具体年份进行调整。我尝试使用If…Else语句,但我一直得到:

变量A变量B乘数变量C 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函数。这个函数内置在BaseR中,我发现它更容易阅读。个人偏好

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


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

尝试将1998年改为1998年。你可以尝试类似这样的数据。tidyverse在这里分散了注意力。OP在if{}else{}上有一个问题,因为他们可能应该使用if else。你在没有解释的情况下纠正了他们的错误,但也在没有解释的情况下用mutate将其包装起来。如果您a解释了为什么使用ifelse而不是if{}else{},并且b将其与您想要提出的任何dplyr建议分开,这将是一个更好的答案。@Gregor感谢您花时间提醒我需要详细说明我的解决方案。我已经编辑了我提议的解决方案,以包含更多的细节,帮助澄清我提议的方法。我确实理解if和else使用的OP。然而,我强烈认为另一种方法可能是有用的。我会让OP来决定我提出的方法是否会分散注意力,是否有用。在这种情况下,ifelse肯定比if更好!要使if{}else工作,需要将它包装在for循环中,与ifelse相比,它的效率非常低。这是需要解释的。这里的关键区别在于,if一次检查一个条件,而ifelse是矢量化的,可以在一个条件向量上同时操作所有条件。顺便说一句,通过编辑有了很大的改进