第四章:基本数据管理

一 贯穿整章的示例

二 变量的创建、重编码和重命名

三 日期值与缺失值

四 数据类型和类型转换

五 数据集的排序、合并与取子集

一 贯穿整章的示例(leadership) 

 代码4-1 
1 > manager<-c(,,,,)
> 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(,,,,)
> q1<-c(,,,,)
> q2<-c(,,,,)
> q3<-c(,,,,)
> q4<-c(,,,NA,)
> q5<-c(,,,NA,)
> 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
// us m
// us f
// uk f
// uk m NA NA
// uk f

 二 变量的创建、重编码与重命名

变量的创建

假设有一个数据框mydata,其中有两变量x1和x2,现想创建一个新变量sumx存储这两变量的和,并创建一个新变量meanx存储这两变量的均值,若使用下面代码中的1与2会出错,原因是R不知道x1和x2是来自数据框data,而应用代码3和4

1 >sum<-x1+x2
>meanx<-(x1+x2)/2 > meanx<-(mydata$x1+mydata$x2) #这样得到的是独立的变量
>meanx<-(mydata$x1+mydata$x2)/
创建新变量
代码4-2
方法一:
1 > mydata<-data.frame(x1<-c(,,,),
+ x2<-c(,,,))
> sumx<-mydata$x1+mydata$x2
> meanx<-(mydata$x1+mydata$x2)/
> sumx
[]
> meanx
[] 2.5 3.0 4.0 6.0
方法二:
1 > attach(mydata)
> mydata$sumx<-x1+x2
> mydata$meanx<-(x1+x2)/
> mydata$sumx
[]
> mydata$meanx
[] 2.5 3.0 4.0 6.0
方法三
1 >mydata<-transform(mydata,
sumx<-x1+x2,
meanx<-(x1+x2)/)

变量重编码

逻辑运算

小于(<)     小于或等于(<=)    大于(>)         大于或等于(>=)      严格等于(==)

不等于(!=)  非x  (!x)            x或y(x|y)      x和y(x&y)             测试x是否为TRUE(isTRUE(x))

 语句variable[condition] <- expression将仅在condition的值为TRUE时执行赋值
1 > leadership$agecat[leadership$age<]<-"Young"
> leadership$age[leadership$age==""] <- NA
> leadership$agecat[leadership$age>]<-"Elder"
> leadership$agecat[leadership$age>= &
+ leadership$age<=]<-"Middle Aged"
> leadership$agecat[leadership$age<]<-"Young"
> leadership
manager date country gender age q1 q2 q3 q4 q5 agecat
// us m Young
// us f Young
// uk f Young
// uk m NA NA Young
// uk f NA <NA>
 > leadership<-within(leadership,{
+ agecat<-NA # 每句后面不能有逗号
+ agecat[age>] <-"Elder"
+ agecat[age>= & age <=]<-"Middle Aged"
+ agecat[age<] <-"Young"})
> leadership
manager date country gender age q1 q2 q3 q4 q5 agecat
// us m Young
// us f Young
// uk f Young
// uk m NA NA Young
// uk f Elder

函数within和函数with类似,不同的是它允许你修改数据框

变量重命名

方法一:fix(leadership)

方法二:rename(dataframe,c(oldname=“newname”,oldname=“newname”,....)

方法三:names()

法一: 
1 > leaderhip
manager date country gender age q1 q2 q3 q4 q5
// us m
// us f
// uk f
// uk m NA NA
// uk f
> fix(leaderhip) # 注意括号是英文括号,不是中文括号
> leaderhip
managerID date country gender age q1 q2 q3 q4 q5
// us m
// us f
// uk f
// uk m NA NA
// uk f 1
法二: 
1 > leaderhip<-rename(leaderhip,
+ c(managerID="manager",date="testDate"))
> leaderhip
manager testDate country gender age q1 q2 q3 q4 q5
// us m
// us f
// uk f
// uk m NA NA
// uk f
法三: 
1 > names(leaderhip)
[] "manager" "testDate" "country" "gender" "age" "q1"
[] "q2" "q3" "q4" "q5"
> names(leaderhip)[]<-"managerID"
> leaderhip
managerID testDate country gender age q1 q2 q3 q4 q5
// us m
// us f
// uk f
// uk m NA NA
// uk f

三 日期值与缺失值

日期值

日期通常以字符串的形式输入到R中,然后转化为数值形式存储的日期变量,函数as.Date()用于执行这种转化,其语法为as.Date(x, "input_format"),其中x字符型数据input_format则是读入日期的适当格式

%d 数字表示的日期(0~31) 例如01~31

%a 缩写的星期名 例如Mon

%A 非缩写的星期名 例如Monday

%m 月份(00~12) 例如00~12

%b 缩写的月份 例如Jan

%B 非缩写的月份 例如January

%y 两位数的年份 例如07

%Y 四位数的年份  例如2007

默认的日期格式为yyyy-mm-dd,语句为:

 >mydates<-as.Date(c("2015-09-24","2015-09-25"))
>mydates
[] "2015-09-24" "2015-09-25

 

格式转化
1 >strDates<-c("24/09/2015","25/09/2015")
>dates<-as.Date(strDates,"%d/%m/%Y")# 注意 输入的日期转化为对应的日期,其次这里的Y是大写的,
如果这里y小写的话,会出现输出结果时间不对。
注意要加斜杠
>dates
[] "2015-09-24" "2015-09-25"
 例子:
1 >leadership
> manager date country gender age q1 q2 q3 q4 q5
// us m
// us f
// uk f
// uk m NA NA
// uk f
>leadership$date
[] "10/24/08" "10/28/08" "10/1/08" "10/12/08" "5/1/09"
>myformat<-"%m/%d/%y"
>leadership$date<-as.Date(leadership$date,myformat)# 为什么这个格式不用加斜杠也行,而上面那个要加 斜杠
>leadership
manager date country gender age q1 q2 q3 q4 q5
-- us m
-- us f
-- uk f
-- uk m NA NA
-- uk f

 

当前日期
Sys.Date()--返回今天的日期
date()--返回当前日期和时间
1 >Sys.Date()
[] "2015-09-23"
>date() # 他人:这种方法返回的是字符串类型
[] "Wed Sep 23 22:55:26 2015"
>today<-Sys.Date()
>format(today,format="%B %d %Y") # 格式化当前日期
[] "九月 24 2015"
>format(today,format="%A")
[] "星期四"

 

两日期相减
1 >startdate<-as.Date("2014-09-24")
>enddate<-as.Date("2015-09-24")
>days<-enddate-startdate
>days
Time difference of days
用difftime()来计算时间间隔,并以星期(weeks),天(days),时(hours),分(minutes),秒(seconds)来表示。
1 > today<-Sys.Date()
> wujiadong<-as.Date("1991-10-07")
> difftime(today,wujiadong,units = "weeks")
Time difference of 1250.429 weeks

此外:利用函数 strDates<-character(date) 可已经两日期变量转成成字符型变量.

help(as.Date) and help(strftime)查看与日期和时间相关的函数

相关包:lubridate

缺失值

1 识别缺失值is.na()
1 > y<-c(,,,NA)
> is.na(y)
[] FALSE FALSE FALSE TRUE
代码4-3
1 > is.na(leaderhip[,:])
q1 q2 q3 q4 q5
FALSE FALSE FALSE FALSE FALSE
FALSE FALSE FALSE FALSE FALSE
FALSE FALSE FALSE FALSE FALSE
FALSE FALSE FALSE TRUE TRUE
FALSE FALSE FALSE FALSE FALSE
2 重编码某些值为缺失值
1 > leaderhip$age[leaderhip$age==]<-NA
> leaderhip$age
[] NA
3 在分析中去除缺失值
1 > x<-c(,,NA,)
> y<-x[]+x[]+x[]+x[]
> sumx<-y
> sumx
[] NA#因有缺失值
> x<-c(,,NA,)
> y<-sum(x,na.rm=TRUE)#去除x中的缺失值 # na.rm()删除缺失值
> y
[]
 > leaderhip
managerID testDate country gender age q1 q2 q3 q4 q5
// us m
// us f
// uk f
// uk m NA NA
// uk f NA
> newdata<-na.omit(leaderhip) # na.omit()删除带有缺失值的行
> newdata
managerID testDate country gender age q1 q2 q3 q4 q5
// us m
// us f
// uk f

四 数据类型与类型转换

ls.numerica() --as.numerica()

is.character()--as.character()

is.vector()--as.vector()

is.matrix()--as.matrix()

is.data.frame()--as.data.frame()

is.factor()--as.factor()

is.logical()--as.logical()

is.datatype()--返回结果是TRUE或FALSE

  > a<-c(,,)
> a
[]
> is.numeric(a)
[] TRUE
> is.vector(a)
[] TRUE
> a<-as.character(a)
> a
[] "" "" ""
> is.numeric(a)
[] FALSE
> is.vector(a)
[] TRUE
> is.character(a)
[] TRUE

五 数据集的排序、合并与取子集

数据集的排序

 > newdata<-leadership[order(leadership$age),]
> newdata
manager date country gender age q1 q2 q3 q4 q5
-- uk f
-- us m
-- uk m NA NA
-- us f
-- uk f
attach(leadership)
> newdata<-leadership[order(gender,age),]
> newdata
manager date country gender age q1 q2 q3 q4 q5
-- uk f
-- us f
-- uk f
-- us m
-- uk m NA NA
> newdata<-leadership[order(gender,-age),]
> newdata
manager date country gender age q1 q2 q3 q4 q5
-- uk f
-- us f
-- uk f
-- uk m NA NA
-- us m

数据集的合并(向数据框中添加列(变量)和行(观测))

添加列

要横向合并两个数据框(数据集),请使用merge()函数。在多数情况下,两个数据框是通过一个或多个共有变量进行联结的(即一种内联结,inner join),例如:

total<-merge(dataframeA,dataframeB,by="ID") # 按照ID进行了合并

or

total<-merge(dataframeA,dataframeB,by=c("ID","Country")) # 按照ID和Country进行了合并

or

total<-cbind(A,B) #  直接横向合并两个矩阵或数据框,并且不需要指定一个公共索引

#   每个对象必须拥有相同的行数,且要有相同顺序排序。

添加行

rbind()--纵向合并两个数据框

total<-rbind(dataframeA,dataframeB) # 两个数据框必须拥有相同的变量,不过它们的顺序不必一定相同。若dataframeA中有dataframeB中没有的变量,则做一下处理:

 删除dataframeA中的多余变量;

 在dataframeB中创建追加的变量并将其值设为NA(缺失)

数据集取子集

选入变量
1 >newdata<-leadership[,c(:)]
> newdata
q1 q2 q3 q4 q5 NA NA
剔除变量
方法一:
1 > myvars<-names(leadership)%in%c("q3","q4") 解释:(1) names(leadership)生成了一个包含所有变量名的字符型向量
> newdata<-leadership[!myvars] (2) names(leadership) %in% c("q3", "q4")返回了一个逻辑型向量,names(leadership)
> newdata 中每个 匹配q3或q4的元素的值为TRUE,反之为FALSE
manager date country gender age q1 q2 q5 (3) 运算符非(!)将逻辑值反转
-- us m 5 (4) leadership[c(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE,
-- us f 5 TRUE)]选择了逻辑值为TRUE的列,于是q3和q4被剔除了
-- uk f 2
-- uk m NA
-- uk f
方法二:
1 >newdata<-leadership[c(-,-)]
> newdata
manager date country gender age q1 q2 q5
-- us m
-- us f
-- uk f
-- uk m NA
-- uk f
方法三:
1 leadership$q3<-leadership$q4<-NULL
> leadership
manager date country gender age q1 q2 q5
-- us m
-- us f
-- uk f
-- uk m NA
-- uk f
subset()函数
1 > newdata<-subset(leadership,age>=|age<,
+ select = c(q1,q2,q3,q4))
> newdata
q1 q2 q3 q4 NA
  > newdata<-subset(leadership,gender=="m" & age>,
+ select = gender:q4)
> newdata
gender age q1 q2 q3 q4
m
m NA
随机抽样
1 > mysample<-leadership[sample(:nrow(leadership),,
+ replace=FALSE),]
> mysample
manager date country gender age q1 q2 q3 q4 q5
// uk m NA NA
// uk f
// us f

使用sql语句操作数据框

R语言学习笔记(4)的更多相关文章

  1. R语言学习笔记之: 论如何正确把EXCEL文件喂给R处理

    博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html ---- 前言: 应用背景兼吐槽 继续延续之前每个月至少一次更新博客,归纳总结学习心得好习惯. ...

  2. R语言学习笔记(二)

    今天主要学习了两个统计学的基本概念:峰度和偏度,并且用R语言来描述. > vars<-c("mpg","hp","wt") &g ...

  3. R语言学习笔记:小试R环境

    买了三本R语言的书,同时使用来学习R语言,粗略翻下来感觉第一本最好: <R语言编程艺术>The Art of R Programming <R语言初学者使用>A Beginne ...

  4. R语言学习笔记:基础知识

    1.数据分析金字塔 2.[文件]-[改变工作目录] 3.[程序包]-[设定CRAN镜像] [程序包]-[安装程序包] 4.向量 c() 例:x=c(2,5,8,3,5,9) 例:x=c(1:100) ...

  5. R语言学习笔记——C#中如何使用R语言setwd()函数

    在R语言编译器中,设置当前工作文件夹可以用setwd()函数. > setwd("e://桌面//")> setwd("e:\桌面\")> s ...

  6. R语言学习笔记-机器学习1-3章

    在折腾完爬虫还有一些感兴趣的内容后,我最近在看用R语言进行简单机器学习的知识,主要参考了<机器学习-实用案例解析>这本书. 这本书是目前市面少有的,纯粹以R语言为基础讲解的机器学习知识,书 ...

  7. R语言学习笔记(一)

    1.不同的行业对数据集(即表格)的行和列称谓不同,统计学家称其为观测(observation)和变量(variable): 2.R语言存储数据的结构: ①向量:类似于C语言里的一位数组,执行组合功能的 ...

  8. R语言学习笔记

    向量化的函数 向量化的函数 ifelse/which/where/any/all/cumsum/cumprod/对于矩阵而言,可以使用rowSums/colSums.对于“穷举所有组合问题" ...

  9. R语言学习笔记-变量的作用域

    R语言是如何将变量值和变量绑定的 在r语言中,当前的 workspace就是global enviroment,当输入变量名时,首先会在global enviroment中搜索该变量,如有,则将它显示 ...

  10. R语言学习笔记:分析学生的考试成绩

    孩子上初中时拿到过全年级一次考试所有科目的考试成绩表,正好可以用于R语言的统计分析学习.为了不泄漏孩子的姓名,就用学号代替了,感兴趣可以下载测试数据进行练习. num class chn math e ...

随机推荐

  1. 利用Lucene将被索引文件目录中的所有文件建立索引

    1.新建两个文件夹htm和index,其中htm中存放被索引的文件,index文件中存放建立的索引文件. 2.新建解析目录中所有文件的类,用来解析指定目录下的所有文件. import java.io. ...

  2. 第二篇:尽可能使用 const

    前言 const 关键字是常量修辞符,如果要告知编译器某个变量在程序中不会发生改变,则可将其声明为 const. 但,对 const 关键字的认识不能仅仅停留在这一层 - 它提供了很多更强大的功能. ...

  3. JS中的动态合集与静态合集

    JS的动态合集 前言 DOM是JavaScript重要组成部分,在DOM中有三个特别的集合分别是NodeList(节点的集合),NamedNodeMap(元素属性的集合)和HTMLCollection ...

  4. Ants(二分图最佳完美匹配)

    Ants Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 6904   Accepted: 2164   Special Ju ...

  5. EasyGBS国标流媒体视频平台接入海康、大华、宇视的摄像机、硬盘录像机NVR、国标下级平台的方案

    在上一篇<EasyNVR和EasyDSS云平台联手都不能解决的事情,只有国标GB28181能解决了>我们大致介绍了国标GB/T28181的使用场景,而且初步介绍了EasyGBS国标视频平台 ...

  6. 微信小程序开发遇见的问题之一

    在开发的时候,因为要定位到当前的城市,而小程序提供的API只是能够获取当前的经纬度,所以我们需要通过接入百度地图的API.调接口的时候发现报错,说域名不合法,此时千万不要着急,只要你登录你的微信开发公 ...

  7. JavaScript函数setInterval()和setTimeout()正确的写法

    一.常规写法 1.1 不传参数 function a (x, y) { var i = 0; var b = function(){ console.log((x * y) + (i++)); } r ...

  8. JavaScript跳出iframe框架

    一.window.top top属性返回最顶层的先辈窗口. 该属性返回对一个顶级窗口的只读引用.如果窗口本身就是一个顶级窗口,top属性存放对窗口自身的引用.如果窗口是一个框架,那么top属性引用包含 ...

  9. ajax异步请求分页显示

    html代码: <!DOCTYPE html> <html lang="en"> <head>     <meta charset=&qu ...

  10. (3.2)mysqldump之备份单个表及脚本批量备份

    单库单表备份通用格式  mysqldump -uroot -p123456 test1 char_1>/opt/mysql_test1_char1.sql 分析:这里test1是库名,char_ ...