• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

【R语言】基本数据管理(带练习题)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

在之前,博主已经讲到过R语言的初步认识https://blog.csdn.net/ly_6699/article/details/88237614 ,感兴趣的伙伴可以点链接查看哦。

本节的内容,我想用例题对基本数据管理 进行讲解,帮助大家理解以下内容。
创建数据框
创建新变量
变量的重编码
变量的重命名
缺失值的检测和排除
类型转换
数据集的合并
数据排序
数据集取子集

4.1 创建数据框

1、将表中的领导行为数据存储为数据框leadership,各个变量名称为:manager、date、country、gender、age、q1、q2、q3、q4、q5

根据题意可知,我们要在这里创建一个名叫leadership 的数据框

> manager<-c(1,2,3,4,5)
> date<-c("10/24/08","10/28/08","10/01/08","10/12/08","05/01/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)
> leadership

4.2 创建新变量

假设现有一个名为mydata的数据框,其中的变量是x1和x2,现在需要创建两个新变量 sum、mean分别存二者的和、均值。如果只用下面的代码:

 > sum=x1+x2    
 > mean=(x1+x2)/2

这时将会得到一条错误信息,因为R并不知道x1和x2的来源是mydata数据框,这时也许你会想到用下面的代码

  > sum=mydata$x1+mydata$x2             
  > mean=(mydata$x1+mydata$x2)/2

这时语句是可以执行成功的,但却只是得到了一个数据框(mydata)和两个独立的向量(sum和mean),不是我们最理想的结果。因为我们期望两个新变量也可以放在原来的数据框中,博主这里给出了三种方法实现:
1)

> mydata<-data.frame(x1=c(2,2,6,4),x2=c(3,4,2,8))
> mydata$sum<-mydata$x1+mydata$x2
> mydata$mean<-(mydata$x1+mydata$x2)/2
> mydata

2)

> mydata<-data.frame(x1=c(2,2,6,4),x2=c(3,4,2,8))
> attach(mydata)
> mydata$sum<-x1+x2
> mydata$mean<-(x1+x2)/2
> detach(mydata)
> mydata

3)

> mydata<-transform(mydata,sum=x1+x2,mean=(x1+x2)/2)
> mydata

三种方法的运行结果都可以达到预期效果。

4.3 变量的重编码

如果我们对第一个数据框leadership中经理人的连续型年龄变量 age 重编码为类别型变量agecat (Young、Middle Aged、Elder),可将中年人(Middle Aged)定义为50岁到70岁之间。
1)首先要把99岁的年龄值重编码为缺失值,使用以下代码即可完成:

> leadership$age[leadership$age==99]<-NA
> leadership


2)再将leadership数据集中经理人的连续型年龄变量age重编码为类别型变量agecat。使用以下代码即可:

> leadership$agecat[leadership $age>70]<-"Elder"
> leadership$agecat[leadership $age>50&leadership $age<=70]<-"Middle Aged"
> leadership$agecat[leadership $age<=50]<-"Young"
> leadership
> 
下面这段代码可以更紧凑一些:
> leadership<-within(leadership,{
+ agecat<-NA
+ agecat[age>70]<-"Elder"
+ agecat[age>=50&age<=70]<-"Middle Aged"
+ agecat[age<50]<-"Young"})
> leadership

4.4 变量重命名

将变量名manger修改为managerID,并将date修改为testDate。
有两种方法可以完成变量的重命名。
1)使用 reshape 包中的rename()函数(要先安装reshape 包):

> install.packages("reshape")
> library(reshape)
> leadership=rename(leadership,c(manger="mangerID",date="testDate"))

2)直接用names 重命名

> names(leadership)[1]<-"mangerID"
> names(leadership)[2]<-"testDate"
> leadership
> 

4.5 缺失值

在R中,缺失值 以符号NA表示。不可能出现的值 通过符号NaN来表示。
函数 is.na() 可以检测缺失值是否存在。当该函数作用于一个对象时,返回一个相同大小的对象,如果某个元素是缺失值,相应的位置会被改写为TRUE,不是缺失值的位置被改写为FALSE。
例如:检测leadership数据集中q1到q5是否存在缺失值。

> is.na(leadership[,6:10])

4.5 在分析中排除缺失值

通过函数 no.omit()移除所有含有缺失值的观测,na.omit()可以删除所有含有缺失数据的行。
例如:移除leadership数据集中含有缺失数据的行。

> newdata<-na.omit(leadership)
> newdata

4.6 类型转换

日期值常以字符串的形式输入到R中,然后转化为以数值形式存储的日期变量,可使用as.Date()进行转换,它的语法为as.Date(x,"input_format"), 其中x是字符型数据,input_format是给出了用于读入日期的适当格式。

例如:将leadership数据集中变量名date的字符串形式转换为日期格式。

> dates<-as.Date(leadership[,2],"%m/%d/%y")
> dates

4.7 数据排序

在R中,可以用order()函数对一个数据框进行排序。默认的排序顺序是升序,在排序变量的前面加一个减号即可得到降序排序的结果。以下示例使用leadership 演示了带护具矿的排序。
1)将各行依女性到男性、同样性别中按年龄升序排序:

> attach(leadership)
> newdata <- leadership[order(gender,age), ]
> newdata
> detach(leadership)


2)将各行依经理人的性别和年龄降序排列:

> attach(leadership)
> newdata <- leadership[order(gender, -age), ]
> newdata
> detach(leadership)

4.8 数据集的合并

  1. 横向合并两个数据框(数据集),可以使用merge()函数。
    例如:将两个数据框按照ID和Country 进行合并。
> ID = c(1, 2, 3, 4, 5)
> country = c("china","UK","France","Germany","Australia")
> person = c(200,400,300,800,450)
> dataframeA = data.frame(ID,country)
> dataframeB = data.frame(ID,country,person)
> total = merge(dataframeA,dataframeB,by = c("ID","country"))
  1. 如果要直接横向合并两个矩阵或数据框,并且不需要指定一个公共索引,那么可以直接使用cbind()函数。
totalc = cbind(dataframeA,dataframeB)

3)纵向合并两个数据框(数据集),可以使用rbind()函数
注意:两个数据框必须用有相同的变量,但他们的数据可以不同。

dataframeC = data.frame(ID,country)
totalr = rbind(dataframeA,dataframeC)

4.9 数据集取子集

使用subset()函数可选择变量和观测

例如:选择了所有age值大于等于35或age值小于24的行,保留了变量q1到q5。

> newage<-subset(leadership,age>=35|age<24,select = c(q1,q2,q3,q4,q5))
> newage


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
R语言绘制双坐标图发布时间:2022-07-18
下一篇:
R语言 数据结构的判别与转换发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap