4.2 创建新变量

在典型的研究项目中,你可能需要创建新变量或者对现有的变量进行变换。这可以通过以下形式的语句来完成:

变量名←表达式

以上语句中的“表达式”部分可以包含多种运算符和函数。表4-2列出了R中的算术运算符。算术运算符可用于构造公式(formula)。 表4-2 算术运算符

运 算 符 描  述
+
-
*
/
^** 求幂
x%%y 求余(x mod y)。5%%2的结果为1
x%/%y 整数除法。5%/%2的结果为2

假设你有一个名为mydata的数据框,其中的变量为x1x2,现在你想创建一个新变量sumx存储以上两个变量的加和,并创建一个名为meanx的新变量存储这两个变量的均值。如果使用代码:

  1. sumx <- x1 + x2
  2. meanx <- (x1 + x2)/2

你将得到一个错误,因为R并不知道x1x2来自于数据框mydata。如果你转而使用代码:

  1. sumx <- mydata$x1 + mydata$x2
  2. meanx <- (mydata$x1 + mydata$x2)/2

语句可成功执行,但是你只会得到一个数据框(mydata)和两个独立的向量(sumxmeanx)。这也许并不是你想要的。因为从根本上说,你希望将两个新变量整合到原始的数据框中。代码清单4-2提供了三种不同的方式来实现这个目标,具体选择哪一个由你决定,所得结果都是相同的。

代码清单4-2 创建新变量

  1. mydata<-data.frame(x1 = c(2, 2, 6, 4),
  2. x2 = c(3, 4, 2, 8))
  3. mydata$sumx <- mydata$x1 + mydata$x2
  4. mydata$meanx <- (mydata$x1 + mydata$x2)/2
  5. attach(mydata)
  6. mydata$sumx <- x1 + x2
  7. mydata$meanx <- (x1 + x2)/2
  8. detach(mydata)
  9. mydata <- transform(mydata,
  10. sumx = x1 + x2,
  11. meanx = (x1 + x2)/2)

我个人倾向于第三种方式,即transform()函数的一个示例。这种方式简化了按需创建新变量并将其保存到数据框中的过程。