如何在R中使用多条件的if语句?

时间:2019-05-21 22:04:06

标签: r dataframe if-statement

我是的新手,并且对if()语句有疑问。

我的数据如下:

Var1  Var2
4     2
6     2
5     1
3     3
2     1

我想创建一个名为Var3的新变量。像

if Var2 = 1 then do; Var3 = Var1*30; end; else;
if Var2 = 2 then do; Var3 = Var1*4; end; else;
if Var2 = 3 then do; Var3 = Var1*1; end; else;

任何帮助您创建代码的人都会感激不尽。

2 个答案:

答案 0 :(得分:2)

1)开关使用在最后的注释中可重复显示的DF尝试使用switch,如下所示。不使用任何软件包。

transform(DF, Var3 = Var1 * sapply(Var2, switch, 30, 4, 1))

给予:

  Var1 Var2 Var3
1    4    2   16
2    6    2   24
3    5    1  150
4    3    3    3
5    2    1   60

有关更多信息,请参见?switch

2)算术另一种方法是使用算术语句求出所需的值。这也不使用任何程序包。

transform(DF, Var3 = Var1 * ((Var2 == 1) * 30 + (Var2 == 2) * 4 + (Var2 == 3) * 1))

2a)

transform(DF, Var3 = Var1 * outer(Var2, 1:3, "==") %*% c(30, 4, 1))

3)下标:这也可以:

transform(DF, Var3 = Var1 * c(30, 4, 1)[Var2])

4)因子:另一种方法是创建一个因子,然后将其转换回数字:

transform(DF, Var3 = Var1 * as.numeric(as.character(factor(Var2, labels = c(30, 4, 1)))))

注意

Lines <- "Var1  Var2
4     2
6     2
5     1
3     3
2     1"
DF <- read.table(text = Lines, header = TRUE)

答案 1 :(得分:0)

语法类似于您列出的内容:

// https://docs.python.org/3/c-api/arg.html#c.Py_BuildValue
const char* __version__ = "0.1.1";
PyObject_SetAttrString( thismodule, "__version__", Py_BuildValue( "s", __version__ ) );

但是一旦掌握了其他方法,其他方法将更快地编写并运行。