我是r的新手,并且对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;
任何帮助您创建代码的人都会感激不尽。
答案 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__ ) );
但是一旦掌握了其他方法,其他方法将更快地编写并运行。