时间:2018-08-14(学习) 2018-08-16(记录)
教程:《R语言实战》
学习内容:第四章
R语言实战
第四章:基本数据管理
1. 添加变量
生成数据框后可以为数据框添加新的变量。
eg:
方法一:
直接为原有数据框添加新变量:
> mydata1 <- data.frame(x1 = c(2, 2, 6, 4), x2 = c(3, 4, 2, 8))
> mydata1$sumx <- mydata1$x1 + mydata1$x2
> mydata1$meanx <- (mydata1$x1 + mydata1$x2)/2
方法二:
使用transform函数为数据框添加新变量:
格式:transform(原数据, 新变量1名称 = 公式, 新变量2名称 = 公式, …)
> mydata2 <- data.frame(x1 = c(2, 2, 6, 4), x2 = c(3, 4, 2, 8))
> mydata2 <- transform(mydata2, sumx = x1 + x2, meanx = (x1 + x2)/2)
> all(mydata1 == mydata2)
[1] TRUE
生成本章节所使用的数据:
> 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) # age中缺失值用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)
> rm("manager", "date", "country", "gender", "age", "q1", "q2", "q3", "q4", "q5")
R中可以根据原有变量的现存值创建新的变量。
如:
对数据框leadership添加新的变量agecat,按年龄对其进行赋值,75以上为老年,55-75为中年,55以下为青年。由于该数据框中年龄的缺失值用99表示,因此在添加新变量agecat前应当将99改为缺失值,以免出现错误。
variable[condition] <- expression :仅在 condition 的值为”TRUE”时执行赋值。
方法一:
> leadership$age[leadership$age == 99] <- NA
> leadership$agecat[leadership$age > 75] <- "Elder"
> leadership$agecat[leadership$age >= 55 &
+ leadership$age <= 75] <- "Middle Aged"
> leadership$agecat[leadership$age < 55] <- "Young"
方法二:
> leadership <- within(leadership, {
+ age[age == 99] <- NA
+ agecat <- NA
+ agecat[age > 75] <- "Elder"
+ agecat[age >=55 & age <=55] <- "Middle Aged"
+ agecat[age < 55] <- "Young"
+ })
(within函数和with函数的区别在于:within函数允许修改数据框,为其添加新变量,而with函数不允许。)
结果:
> leadership
manager date country gender age q1 q2 q3 q4 q5 agecat
1 1 10/24/08 US M 32 5 4 5 5 5 Young
2 2 10/28/08 US F 45