小白读《R语言实战》写的读书笔记(第三章)

#####第三章:基本数据管理#####
####一、一个示例####
#书中建立了一个5行10列的数据框,标题为领导行为的性别差异,具体输入代码如下:
leadership <- data.frame(
  manager = c(1,2,3,4,5),
  date = c("10/24/14", "10/28/14", "10/01/14", "10/12/14", "05/01/14"),
  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,3,5,4,1),
  q4 = c(5,5,5,NA,2),
  q5 = c(5,5,2,NA,1)
)
leadership
#rm(leadership)
#以上数据框为下面章节数据前提


####二、创建新变量####
#基本的表达式为: 变量名 <- 表达式
#基本的加减乘除即+-*/,还有求幂^或者**
#x%%y:求余,例5%%2=1
#x%/%y:整数除法,例5%/%2=2
#以leadership数据框的数据的数据为基础,建立两个新的变量:
total_score <- q1+q2+q3+q4+q5
mean_score <- (q1+q2+q3+q4+q5)/5
#以上这两行代码为错误代码,因为R并不知道q1到q5来自数据框leadership
total_score <- leadership$q1 + leadership$q2 + leadership$q3 + leadership$q4 + leadership$q5
mean_score <- (leadership$q1 + leadership$q2 + leadership$q3 + leadership$q4 + leadership$q5)/5
#这样就新建了两个新的变量
#但这两个是独立变量,并没有合并到leadership数据框中
#利用transform()函数将建立两个新的变量并导入到原leadership数据框中:
leadership <- transform(leadership, 
                        total_score = q1 + q2 + q3 + q4 + q5,
                        mean_score = (q1 + q2 + q3 + q4 + q5)/5)
leadership
#网上还有另外一种方法
leadership$total_score <- leadership$q1 + leadership$q2 + leadership$q3 + leadership$q4 + leadership$q5
leadership$mean_score <- (leadership$q1 + leadership$q2 + leadership$q3 + leadership$q4 + leadership$q5)/5
leadership
##我试验了一下,两种方法都可以

####三、变量的重新编码####
#变量的重新编码就是用旧变量值创建新值的过程,主要用于:
#1、将连续型变量修改为类别值(John注:分类变量)
#2、将错误编码替换为正确值
#3、基于一个分数线创建不同分组变量
#常见逻辑运算符见书46页:
#<小于;>大于;<=小于或等于;>=大于或等于;==严格等于;!=不等于;
#!x 非x;x|y x或y;x&y x和y;isTRUE(x) 测试x是否为TRUE
##现在将leadership数据框中age列重新编码为agecat
#首先将99岁重新正确编码
leadership$age[leadership$age == 99] <- NA
#语句variable[condition] <- expression只有在condition值为TRUE时执行赋值
leadership$agecat[leadership$age > 75] <- "Elder"
leadership$agecat[leadership$age >= 55 & leadership$age <= 75] <- "Middle Aged"
leadership$agecat[leadership$age < 55] <- "Young"
leadership["agecat"]
leadership$agecat #运行这段代码和上一行代码,看看两个有什么不一样
#这里可以用within()函数简化代码
leadership <- within(leadership,{
  agecat <- NA #先创建agecat变量
  age[age == 99] <- NA
  agecat[age > 75] <- "Elder"
  agecat[age >= 55 & age <= 75] <- "Middle Aged"
  agecat[age < 55] <- "young"})
leadership["agecat"]
rm(leadership)
#car包中的recode()函数也可以重编码数据,后续可以自学以下
#上一章学习过within()函数,如果忘了可

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值