R in Action(1) 基本数据结构
一数据类型
R的数据类型包括数值型、字符型、逻辑型(布尔)、复数型和原生型,同时R有好多存储数据的对象类型,包括标量、向量、矩阵、数组、数据框和列表,如下图所示下图(图的版权神马的归原作者跟原出版社所有,赶紧避嫌,呵呵)

1、向量操作
a <- c(1, 2, 5, 3, 6, -2, 4)
b <- c("one", "two", "three")
c <- c(TRUE, TRUE, TRUE, FALSE, TRUE, FALSE)
上面把3列向量赋与a,b,c,注意这里向量内的元素必须是同一种数据类型(数值型、字符型和逻辑型)
访问向量如a[c(2,4)],将会得到a[2]跟a[4]的值,注意R与C、Python不一样,下标访问从1开始。
a[2:4] 得到a[2],a[3],a[4]三个值,这里2:4等价于c(2,3,4)
2、矩阵操作
> y <- matrix(1:10, nrow = 5, ncol = 2)
> y
[,1] [,2]
[1,] 1 6
[2,] 2 7
[3,] 3 8
[4,] 4 9
[5,] 5 10
> y <- matrix(1:10, nrow = 5, ncol = 2,byrow=TRUE)
> y
[,1] [,2]
[1,] 1 2
[2,] 3 4
[3,] 5 6
[4,] 7 8
[5,] 9 10
上面代码是创建矩阵的代码,第一段跟第二段的区别是后者采用了按行的方式填充,R中默认是按列填充。
cells <- c('东邪', '西毒', '南帝', '北丐')
rnames <- c("R1", "R2")
cnames <- c("C1", "C2")
mymatrix <- matrix(cells, nrow = 2, ncol = 2, byrow = TRUE,
dimnames = list(rnames, cnames))
> mymatrix
C1 C2
R1 "东邪" "西毒"
R2 "南帝" "北丐"
类似跟向量一样矩阵内的元素也要保持一致,上面代码可以给行列取别名。
访问矩阵:
> mymatrix[2]
[1] "南帝"
> mymatrix[2,2]
[1] "北丐"
> mymatrix[2,1:2]
C1 C2
"南帝" "北丐"
> mymatrix[2,]
C1 C2
"南帝" "北丐"
> mymatrix[,1]
R1 R2
"东邪" "南帝"
> mymatrix[,1:2]
C1 C2
R1 "东邪" "西毒"
R2 "南帝" "北丐"
3、数据框操作
这是R里应用较为广泛的数据结构,它较矩阵具有更一般的形式,data_frame <- data.frame(col1,col2,....) 其中col1,col2可以为不同的数据类型。
创建一个数据框
> patientID <- c(1, 2, 3, 4)
> age <- c(25, 34, 28, 52)
> diabetes <- c("Type1", "Type2", "Type1", "Type1")
> status <- c("Poor", "Improved", "Excellent", "Poor")
> patientdata <- data.frame(patientID, age, diabetes,
+ status)
> patientdata
patientID age diabetes status
1 1 25 Type1 Poor
2 2 34 Type2 Improved
3 3 28 Type1 Excellent
4 4 52 Type1 Poor
patientdata是一个包含4列的数据框,访问每一列可以用patientdata$age实现
对每一列做处理的时候 都要加上数据框名字+$这个确实很繁琐,可以利用{attach(),detach()}和with()函数简化
例如
plot(patientdata$patientID,patientdata$age) attach(patientdata)
plot(patientID,age)
detach(patientdata)
第一行代码可以用后三行代码替换,但是这里要注意一个问题,就是数据框里面列名不能跟外部内存对象同名。
为解决这个问题,下面直接把操作都放到with()里面。
with(patientdata,{plot(patientID,age)})
4、因子操作
这个相当于把列里面字符型元素,进行数字编码,在分类算法里面也通常对字符型特征进行数字编码(通常添加特征进行01编码)
> patientID <- c(1, 2, 3, 4)
> age <- c(25, 34, 28, 52)
> diabetes <- c("Type1", "Type2", "Type1", "Type1")
> status <- c("Poor", "Improved", "Excellent", "Poor")
> diabetes <- factor(diabetes)
> status <- factor(status, order = TRUE)
> patientdata <- data.frame(patientID, age, diabetes,
+ status)
> str(patientdata)
'data.frame': 4 obs. of 4 variables:
$ patientID: num 1 2 3 4
$ age : num 25 34 28 52
$ diabetes : Factor w/ 2 levels "Type1","Type2": 1 2 1 1
$ status : Ord.factor w/ 3 levels "Excellent"<"Improved"<..: 3 2 1 3
> summary(patientdata)
patientID age diabetes status
Min. :1.00 Min. :25.00 Type1:3 Excellent:1
1st Qu.:1.75 1st Qu.:27.25 Type2:1 Improved :1
Median :2.50 Median :31.00 Poor :2
Mean :2.50 Mean :34.75
3rd Qu.:3.25 3rd Qu.:38.50
Max. :4.00 Max. :52.00
通常内置的是按字母顺序创建,例如Excellent、Improved、Poor编码成0、1、2
5、列表操作
g <- "My First List"
h <- c(25, 26, 18, 39)
j <- matrix(1:10, nrow = 5)
k <- c("one", "two", "three")
mylist <- list(title = g, ages = h, j, k)
列表访问的时候mylist[[2]]和mylist[['age']]
R in Action(1) 基本数据结构的更多相关文章
- (2)R中的数据类型和数据结构
R中的数据结构主要面向<线性代数>中的一些概念,如向量.矩阵等.值得注意的是,R中其实没有简单数据(数值型.逻辑型.字符型等),对于简单类型会自动看做长度为1的向量.比如: > b= ...
- R in Action(0) 开篇
这几年数据挖掘的火热,也越来越多的人把R作为数据挖掘的一个辅助工具,据国际性组织kkguter统计有60%的人在挖掘过程中用到R工具,可见这个工具是多么的流行,对于数据统计.筛选以及画图绝对是神器.尽 ...
- R语言入门 :基本数据结构
1.向量 向量是R语言中最基本的数据类型,在R语言中没有单独的变量. (1) 创建向量 R语言中可以用 = 或者 <- 来赋值. 向量名 <- 向量 或 向量名 = 向量 向量的创建方 ...
- R的基础学习之数据结构
来源:http://blog.qiubio.com:8080/archives/3753/4 1.atomic vector :一维的,放置同一类型数据的数据类型 1.1创建:由c()函数 ,seq( ...
- 包--R In Action
1.4 包R提供了大量开箱即用的功能,但它最激动人心的一部分功能是通过可选模块的下载和安装来实现的.目前有2500多个①称为包(package)的用户贡献模块可从http://cran.r-proje ...
- R基础之批处理--R IN ACTION
1.5 批处理多数情况下,我们都会交互式地使用R:在提示符后输入命令,接着等待该命令的输出结果.偶尔,我们可能想要以一种重复的.标准化的.无人值守的方式执行某个R程序,例如,你可能需要每个月生成一次相 ...
- R in action读书笔记(22)第十六章 高级图形进阶(下)
16.2.4 图形参数 在lattice图形中,lattice函数默认的图形参数包含在一个很大的列表对象中,你可通过trellis.par.get()函数来获取,并用trellis.par.set() ...
- R in action读书笔记(21)第十六章 高级图形进阶(上)
16.1 R 中的四种图形系统 基础图形函数可自动调用,而grid和lattice函数的调用必须要加载相应的包(如library(lattice)).要调用ggplot2函数需下载并安装该包(inst ...
- R in action读书笔记(20)第十五章 处理缺失数据的高级方法
处理缺失数据的高级方法 15.1 处理缺失值的步骤 一个完整的处理方法通常包含以下几个步骤: (1) 识别缺失数据: (2) 检查导致数据缺失的原因: (3) 删除包含缺失值的实例或用合理的数值代替( ...
随机推荐
- phpcms V9 广告模块中广告模板修改
广告模块模板位置 \phpcms\modules\poster\install\templates\*.html 我的需求: 去掉边框控制代码,是否显示边框我将在页面模板中设置,因些需要删除模板中的以 ...
- 管理SQL Server监控
http://blog.csdn.net/DBA_Huangzj/article/category/1133081 http://www.cnblogs.com/bhtfg538/archive/20 ...
- Cesium之3D拉伸显示行政区
转自原文 Cesium之3D拉伸显示行政区含GeoJSON数据生成过程GDAL的ogr2ogr Cesiumjs 是一套javascript库,用来渲染3D地球,2D区域地图,和多种GIS要素.不需要 ...
- repeated-substring-pattern
https://leetcode.com/problems/repeated-substring-pattern/ 下面这个方法,开始我觉得挺好.可惜还是超时了.后来我就加了一个剪枝策略,只有长度能够 ...
- VC2012编译protobuf出错处理
近来要学习protobuf的协议生成.须要从网上下载它的代码,从这个SVN地址下载: 个.因此编译提示上面的出错.仅仅须要把std;;tuple里的个数定义为10个就可以.,因此不支持5个以上的參数输 ...
- 关于Label::createWithBMFont中资源文件使用的坑爹问题解决方式
1.问题 使用Label的createWithBMFont,结果.fnt的资源总是找不到或者获取数据失败.原来.fnt资源的使用须要配合该资源的.png共同 使用,如bitmapFontTest3.f ...
- 从头写一个Cucumber测试(二) Cucumber Test
转载:https://yaowenjie.github.io/%E7%BC%96%E7%A8%8B%E7%9B%B8%E5%85%B3/cucumber-test-part-2 承接上文 前一篇博 ...
- word中更改图片和标题之间的垂直距离
word中插入图片后.往往须要给图片加上标题. 你插入图片和给图片插入标题时,word用的是默认的格式给你插入的图片和标题. 假如原来的paragraph是2倍行距.你的图片和标题之间的距离也是2倍行 ...
- Odoo车辆管理
odoo车辆管理用于管理公司用车,可以记录以下信息 车辆 车辆的服务合同 车辆的里程 车辆的服务记录 车辆的成本 使用之前,先要进行基本设置 基础设置 维护车辆型号 即维护车辆 ...
- python(6)- 常用快捷键及基础命令