基本数据管理
4.2 创建新变量
如果想创建一个储存当前数据库内数据运算后结果的变量到数据框中
使用within()函数(可以修改数据框中的变量)
> mydata <- data.frame(x1=c(2,2,6,4),x2=c(3,4,2,8))
> mydata <- within(mydata,{
+ sumx <- x1+x2
+ meanx <- (x1+x2)/2
+ })
> mydata
x1 x2 meanx sumx
1 2 3 2.5 5
2 2 4 3.0 6
3 6 2 4.0 8
4 4 8 6.0 12
还可以使用transform()函数。*注意:在向数据库中添加新变量时,使用transform()函数比其他函数使用起来更加简便。sumx和meanx后接的是等号而不是赋值符号,将新变量作为函数内的选项。
> rm(mydata)
> mydata <- data.frame(x1=c(2,2,6,4),x2=c(3,4,2,8))
> mydata <- transform(mydata,sumx=x1+x2,meanx=(x1+x2)/2)
> str(mydata)
'data.frame': 4 obs. of 4 variables:
$ x1 : num 2 2 6 4
$ x2 : num 3 4 2 8
$ sumx : num 5 6 8 12
$ meanx: num 2.5 3 4 6
4.3 变量的重编码
常用的逻辑运算符见书P71。
在希望对变量的现有值创建新值时,需要对变量值进行重编码并且将其储存为数据库的新变量值。
举例:
> manager <- c(1,2,3,4,5)
> date <- c("10/24/08","10/28/08","10/1/08","10/12/08","5/1/09")
> country <- c("US","US","UK","UK","UK")
> gender <- c("M","F","F","M","F")
> age <- c(32,45,25,39,99)
> q1 <- c(5,3,3,3,2)
> q2 <- c(4,5,5,3,2)
> q3 <- c(5,2,5,4,1)
> q4 <- c(5,5,5,NA,2)
> q5 <- c(5,5,2,NA,1)
> leadership <- data.frame(manager,date,country,gender,age,q1,q2,q3,q4,q5,stringsAsFactors = FALSE)
> leadership
manager date country gender age q1 q2 q3 q4 q5
1 1 10/24/08 US M 32 5 4 5 5 5
2 2 10/28/08 US F 45 3 5 2 5 5
3 3 10/1/08 UK F 25 3 5 5 5 2
4 4 10/12/08 UK M 39 3 3 4 NA NA
5 5 5/1/09 UK F 99 2 2 1 2 1
现在想对受调查者的年龄进行分层,分选为“Young”,“Middle aged”,“Elder”。
使用within()函数
> leadership <- within(leadership,{
+ agecat <- NA
+ agecat [age>75] <- "Elder"
+ agecat[age<=75 &