2

我想对数据框的列进行许多修改。但是,由于需要大量列和转换,我想避免一遍又一遍地使用数据框名称。

在 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 中执行此操作的最佳方法。

4

2 回答 2

10

您可以使用plyrmutate

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

或者withinbaseR 中。请注意,它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:=

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 的方法快得多。)

于 2012-11-29T01:07:44.687 回答
2

如果你想在你的数据框中创建一个新变量varCA你可以使用

A$varC <- A$varA + (A$varA > 1)
于 2012-11-29T01:07:47.380 回答