我想对数据框的列进行许多修改。然而,由于需要大量的列和转换,我想避免一遍又一遍地使用数据框名称。
在 SAS 数据步骤中,您可以在一个数据步骤内创建一个变量并在定义后立即引用它:
data A;
set A;
varA = varB > 1;
varC = var A + varB;
....
run;
在 R 中可以做到这一点吗?
我能想到的一种方法是使用 Attach(),然后创建数百个数组,然后在 detach() 之前对它们进行 cbind()。我知道许多 R 老手建议不要使用 Attach()。但我需要进行大量的数据操作(数百个新变量),并且按顺序对每个变量调用 Transform(df,) 将非常麻烦。
例如:
attach(A)
varA <- varB > 1
varC <- varA + varB
A <- cbind(varA, varB, varC)
detach()
但我不确定这是否是在 R 中执行此操作的最佳方法。
您可以使用plyr
and mutate
.
A <- data.frame(varB = 1:5)
library(plyr)
A <- mutate(A, varA = varB>1, varC = varA + varB)
A
varB varA varC
1 1 FALSE 1
2 2 TRUE 3
3 3 TRUE 4
4 4 TRUE 5
5 5 TRUE 6
Or within
in base
R. 请注意within
以相反的顺序返回您创建的列。
A <- data.frame(varB = 1:5)
A <- within(A, {varA <- varB>1; varC <- varA + varB})
A
varB varC varA
1 1 1 FALSE
2 2 3 TRUE
3 3 4 TRUE
4 4 5 TRUE
5 5 6 TRUE
到目前为止我最喜欢的是data.table
and :=
DA <- data.table(varB = 1:5)
DA[,varA := varB >1 ][, varC := varA + varB]
DA
varB varA varC
1: 1 FALSE 1
2: 2 TRUE 3
3: 3 TRUE 4
4: 4 TRUE 5
5: 5 TRUE 6
现在:=
每次调用时最容易使用一次[
。有很多方法可以解决这个问题,但我认为字符串[
调用并不太难遵循(而且它会比mutate
或任何使用 data.frames 的方法。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)