我想对数据框的列进行许多修改.但是,由于需要大量的列和转换,我希望避免不得不一遍又一遍地使用数据框名称.
在SAS数据步骤中,在一个数据步骤中,您可以创建变量并在定义变量后立即引用它:
data A;
set A;
varA = varB > 1;
varC = var A + varB;
....
run;
Run Code Online (Sandbox Code Playgroud)
可以在R中这样做吗?
我能想到的一种方法是使用attach(),然后在detach()之前创建数百个数组然后cbind().我知道很多R老兵建议不要使用attach().但我需要做大量数据操作(数百个新变量),并且按顺序调用transform(df,)会非常麻烦.
例如:
attach(A)
varA <- varB > 1
varC <- varA + varB
A <- cbind(varA, varB, varC)
detach()
Run Code Online (Sandbox Code Playgroud)
但我不确定这是否是在R中执行此操作的最佳方式.
mne*_*nel 10
你可以使用plyr和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
Run Code Online (Sandbox Code Playgroud)
或者within在baseR.注意,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
Run Code Online (Sandbox Code Playgroud)
到目前为止,我最喜欢的是data.table和:=
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
Run Code Online (Sandbox Code Playgroud)
目前:=每次通话最容易使用一次[.有很多方法可以解决这个问题,但我认为[调用字符串并不难以遵循(并且它将比mutate使用data.frames的任何方法快得多).