基础知识 | R语言数据管理之变量创建
R语言数据管理之变量
在做任何数据分析的第一步,是根据个人需求创建数据集,存储数据的结构是多样的,包括向量,矩阵、数据框、因子以及列表等。其实,以上几个R语言的独特术语,在C++中也会经常用到,导致很多人都会误认为自己很熟悉了(特别是小编),然而在实际的应用中,却经常出现错误。最近在处理一波量大的数据,在运行程序的过程中,因为前期数据处理错误却出现各种bug,经过检查数据集发现是数据管理的问题,为巩固R语言的基本数据管理,特地重新学习基础知识。
01
创建新变量
#创建数据框
我们来创建一份关于某央企组织新员工的体检报告的数据框吧。
> PatientID<-c(1,2,3,4,5,6)
> Data<-c("03/20/20","03/21/20","03/22/20","03/23/20","03/24/20","03/25/20")
> Age<-c(18,25,26,35,48,50)
> Gender<-c("M","F","F","M","F","M")
> City<-c("福州","厦门","泉州","龙岩","漳州","三明")
> Pr1<-c("69","57","67","65","72","55")
> Pr2<-c("180","155","159","184","167","175")
> Pr3<-c("11","14","34","23","35","12")
> Pr4<-c("6","7","5","8","6","9")
> Pr5<-c("20","34","35","56","47","19")
> S1<-c(88,78,98,56,45,60)
> S2<-c(67,87,45,25,18,96)
> mydata<-data.frame(PatientID,Data,Age,Gender,City,Pr1,Pr2,Pr3,Pr4,Pr5,S1,S2)
#在数据框中添加一列S1和S2的求和结果-方法1
> attach(mydata)
> mydata$sumS<-S1+S2
> mydata
PatientID Data Age Gender City Pr1 Pr2 Pr3 Pr4 Pr5 S1 S2 sumS
1 1 03/20/20 18 M 福州 69 180 11 6 20 88 67 155
2 2 03/21/20 25 F 厦门 57 155 14 7 34 78 87 165
3 3 03/22/20 26 F 泉州 67 159 34 5 35 98 45 143
4 4 03/23/20 35 M 龙岩 65 184 23 8 56 56 25 81
5 5 03/24/20 48 F 漳州 72 167 35 6 47 45 18 63
6 6 03/25/20 50 M 三明 55 175 12 9 19 60 96 156
#在数据框中添加一列S1和S2的求和结果-方法2
> mydata$SumS<-mydata$S1+mydata$S2
> mydata$SumS<-mydata$S1+mydata$S2
> mydata
PatientID Data Age Gender City Pr1 Pr2 Pr3 Pr4 Pr5 S1 S2 sumS SumS
1 1 03/20/20 18 M 福州 69 180 11 6 20 88 67 155 155
2 2 03/21/20 25 F 厦门 57 155 14 7 34 78 87 165 165
3 3 03/22/20 26 F 泉州 67 159 34 5 35 98 45 143 143
4 4 03/23/20 35 M 龙岩 65 184 23 8 56 56 25 81 81
5 5 03/24/20 48 F 漳州 72 167 35 6 47 45 18 63 63
6 6 03/25/20 50 M 三明 55 175 12 9 19 60 96 156 156
#在数据框中添加一列S1和S2的求和与均值结果-方法3
> mydata<-transform(mydata,SumS=S1+S2,MeanS=(S1+S2)/2)
> mydata
PatientID Data Age Gender City Pr1 Pr2 Pr3 Pr4 Pr5 S1 S2 sumS SumS MeanS
1 1 03/20/20 18 M 福州 69 180 11 6 20 88 67 155 155 77.5
2 2 03/21/20 25 F 厦门 57 155 14 7 34 78 87 165 165 82.5
3 3 03/22/20 26 F 泉州 67 159 34 5 35 98 45 143 143 71.5
4 4 03/23/20 35 M 龙岩 65 184 23 8 56 56 25 81 81 40.5
5 5 03/24/20 48 F 漳州 72 167 35 6 47 45 18 63 63 31.5
6 6 03/25/20 50 M 三明 55 175 12 9 19 60 96 156 156 78.0
02
变量的重编码
变量的重新编码是指对一个或多个变量现有值进行修改,创建一个新值的过程。可以理解为将数据框中个别错误值进行修正,或者将一列或者一行的连续性的变量修改为一组类别值等。
#将mydata数据框中的Age这个连续型的变量重新编码,改为类别型的变量Age Class(比如Young,Middle Aged、Elder)
方法1
> mydata$AgeClass[mydata$Age>=45]<-"Elder"
> mydata$AgeClass[mydata$Age<=45&mydata$Age>=30]<-"Middle Aged"
> mydata$AgeClass[mydata$Age<=30]<-"Young"
> mydata
PatientID Data Age Gender City Pr1 Pr2 Pr3 Pr4 Pr5 S1 S2 sumS SumS MeanS AgeClass
1 1 03/20/20 18 M 福州 69 180 11 6 20 88 67 155 155 77.5 Young
2 2 03/21/20 25 F 厦门 57 155 14 7 34 78 87 165 165 82.5 Young
3 3 03/22/20 26 F 泉州 67 159 34 5 35 98 45 143 143 71.5 Young
4 4 03/23/20 35 M 龙岩 65 184 23 8 56 56 25 81 81 40.5 Middle Aged
5 5 03/24/20 48 F 漳州 72 167 35 6 47 45 18 63 63 31.5 Elder
6 6 03/25/20 50 M 三明 55 175 12 9 19 60 96 156 156 78.0 Elder
方法2
> mydata<-within(mydata,{
+ AgeClass[Age>=45]<-"Elder"
+ AgeClass[Age>=30&Age<=45]<-"Middle Aged"
+ AgeClass[Age<30]<-"Young"})
> mydata
PatientID Data Age Gender City Pr1 Pr2 Pr3 Pr4 Pr5 S1 S2 sumS SumS MeanS AgeClass
1 1 03/20/20 18 M 福州 69 180 11 6 20 88 67 155 155 77.5 Young
2 2 03/21/20 25 F 厦门 57 155 14 7 34 78 87 165 165 82.5 Young
3 3 03/22/20 26 F 泉州 67 159 34 5 35 98 45 143 143 71.5 Young
4 4 03/23/20 35 M 龙岩 65 184 23 8 56 56 25 81 81 40.5 Middle Aged
5 5 03/24/20 48 F 漳州 72 167 35 6 47 45 18 63 63 31.5 Elder
6 6 03/25/20 50 M 三明 55 175 12 9 19 60 96 156 156 78.0 Elder
03
变量的重命名
#将City修改为Location,Data修改成Examination date
方法1:rename()函数
> install.packages("reshape")
> library(reshape)
> mydata<-rename(mydata,c(City="Location",Data="Examination data"))
> mydata
PatientID Examination data Age Gender Location Pr1 Pr2 Pr3 Pr4 Pr5 S1 S2 sumS SumS MeanS
1 1 03/20/20 18 M 福州 69 180 11 6 20 88 67 155 155 77.5
2 2 03/21/20 25 F 厦门 57 155 14 7 34 78 87 165 165 82.5
3 3 03/22/20 26 F 泉州 67 159 34 5 35 98 45 143 143 71.5
4 4 03/23/20 35 M 龙岩 65 184 23 8 56 56 25 81 81 40.5
5 5 03/24/20 48 F 漳州 72 167 35 6 47 45 18 63 63 31.5
6 6 03/25/20 50 M 三明 55 175 12 9 19 60 96 156 156 78.0
AgeClass
1 Young
2 Young
3 Young
4 Middle Aged
5 Elder
6 Elder
方法2:names()函数
#将Data命名为Examination data,Pr1-5修改为Item1-5。
> names(mydata)[2]<-"Examination date"
> names(mydata)[7:11]<-c("Item1","Item2","Item3","Item4","Item5")
> mydata
PatientID Examination date Age Gender Location Pr1 Item1 Item2 Item3 Item4 Item5 S2 sumS
1 1 03/20/20 18 M 福州 69 180 11 6 20 88 67 155
2 2 03/21/20 25 F 厦门 57 155 14 7 34 78 87 165
3 3 03/22/20 26 F 泉州 67 159 34 5 35 98 45 143
4 4 03/23/20 35 M 龙岩 65 184 23 8 56 56 25 81
5 5 03/24/20 48 F 漳州 72 167 35 6 47 45 18 63
6 6 03/25/20 50 M 三明 55 175 12 9 19 60 96 156
SumS MeanS AgeClass
1 155 77.5 Young
2 165 82.5 Young
3 143 71.5 Young
4 81 40.5 Middle Aged
5 63 31.5 Elder
6 156 78.0 Elder
小结
R语言最大的优势是绘图,学R的初衷就是为了绘制实验过程产生的数据图,然而随着深度学习,会发现,R语言的数据分析也很重要,常常在绘制图形的过程中,因为数据框存在格式不统一,字符或者缺失值等原因导致绘图失败。对于非数学专业又喜欢R语言的人来说,学R之路漫漫其修远,没有极客基因是不行的,打好基础是进阶的前提!
- React第三方组件6(状态管理之Mobx的使用⑤异步操作)
- 机器学习(五)使用Python和R语言从头开始理解和编写神经网络介绍目录神经网络背后的直观知识多层感知器及其基础知识什么是激活函数?前向传播,反向传播和训练次数(epochs)多层感知器全批量梯度下降
- 洛谷P2251 质量检测
- React第三方组件6(状态管理之Mobx的使用④TodoList下)
- HDU 1536 S-Nim
- 洛谷P2723 丑数 Humble Numbers
- Python黑帽编程2.5 函数
- 洛谷P1317 低洼地
- ZOJ 3594 Sexagenary Cycle
- React第三方组件6(状态管理之Mobx的使用③TodoList中)
- P1554 梦中的统计
- Word2Vec教程-Skip-Gram模型模型“伪”任务关于模型的更多细节隐藏层输出层
- React第三方组件6(状态管理之Mobx的使用②TodoList上)
- The 9th Zhejiang Provincial Collegiate Programming Contest
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【Java面试总结】常用框架之Spring
- 【学以致用】C++操作Redis
- 商业鬼才教你 工厂方法 && 抽象工厂 模式
- redis学习(十四)
- 用动态路由打通各Virtual L2网络 By HKL,
- 《深入RabbitMQ》笔记
- Nginx学习日志(六)Linux下设置开机自启动
- 轻松学会 React 钩子:以 useEffect() 为例
- linux新增用户
- Rancher搭建集群:[etcd] Failed to bring up Etcd Plane: etcd cluster is unhealthy
- ECS误删文件后恢复数据
- rxjs里的Observable对象的pipe方法
- rxjs里的Observable对象和map配合的一个用法
- rxjs里的Observable对象subscribe方法的执行原理
- Java正则表达式