4.2 创建新变量
在典型的研究项目中,你可能需要创建新变量或者对现有的变量进行变换。这可以通过以下形式的语句来完成:
变量名←表达式
以上语句中的“表达式”部分可以包含多种运算符和函数。表4-2列出了R中的算术运算符。算术运算符可用于构造公式(formula)。 表4-2 算术运算符
运 算 符 | 描 述 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
^ 或** | 求幂 |
x%%y | 求余(x mod y )。5%%2 的结果为1 |
x%/%y | 整数除法。5%/%2 的结果为2 |
假设你有一个名为mydata
的数据框,其中的变量为x1
和x2
,现在你想创建一个新变量sumx
存储以上两个变量的加和,并创建一个名为meanx
的新变量存储这两个变量的均值。如果使用代码:
sumx <- x1 + x2
meanx <- (x1 + x2)/2
你将得到一个错误,因为R并不知道x1
和x2
来自于数据框mydata
。如果你转而使用代码:
sumx <- mydata$x1 + mydata$x2
meanx <- (mydata$x1 + mydata$x2)/2
语句可成功执行,但是你只会得到一个数据框(mydata
)和两个独立的向量(sumx
和meanx
)。这也许并不是你想要的。因为从根本上说,你希望将两个新变量整合到原始的数据框中。代码清单4-2提供了三种不同的方式来实现这个目标,具体选择哪一个由你决定,所得结果都是相同的。
代码清单4-2 创建新变量
mydata<-data.frame(x1 = c(2, 2, 6, 4),
x2 = c(3, 4, 2, 8))
mydata$sumx <- mydata$x1 + mydata$x2
mydata$meanx <- (mydata$x1 + mydata$x2)/2
attach(mydata)
mydata$sumx <- x1 + x2
mydata$meanx <- (x1 + x2)/2
detach(mydata)
mydata <- transform(mydata,
sumx = x1 + x2,
meanx = (x1 + x2)/2)
我个人倾向于第三种方式,即transform()
函数的一个示例。这种方式简化了按需创建新变量并将其保存到数据框中的过程。