R语言基础:数组和列表

数组(array)
一维数据是向量,二维数据是矩阵数组是向量和矩阵的直接推广,是由三维或三维以上的数据构成的.
数组函数是array(),语法是:array(dadta, dim),其中data必须是同一类型的数据,dim是各维的长度组成的向量。
1、产生一个三维和四维数组。
例1:xx <- array(1:24, c(3, 4, 2)) #一个三维数组
例2:yy <- array(1:36, c(2, 3, 3, 2)) #一个四维数组
 
2、dim()函数可将向量转化成数组或矩阵。
例1:xx <- 1:24; dim(xx) <- c(3, 4, 2); xx #效果同array(1:24, c(3, 4, 2))
例2:zz <- 1:10; dim(zz) <- c(2, 5); zz #效果同matrix(1:10, 2, 5) 
 
列表(list)
向量、矩阵和数组的元素必须是同一类型的数据一个数据对象需要包含不同的数据类型,它可以采用列表这种形式。
创建列表可用list()函数,语法是:list(name1 = component1, name2 = component2, ...)。
1、创建一个列表
例1: xx <- rep(1:2, 3:4)
yy <- c('Mr A', 'Mr B', 'Mr C', 'Mr D', 'Mr E', 'Mr D', 'Mr F')
zz <- 'discussion group'
name.list <- list(group = xx, name = yy, decription = zz) #创建了一个名为"name.list"的列表
name.list$n[name.list$g == 2]
length(name.list)
mode(name.list)
names(name.list)

向量(vector)

1、seq():产生有规律的数列,间距省略时默认值为1。
例1:seq(10, 20, 0.5)
例2:seq(0, by = 0.03, length = 15)
 
2、rep():产生有规律的数列,重复第一个变量若干次。
例1:rep(1:3, 1:3)
例2:rep(1:3, rep(2, 3))
例3:rep(1:3, length = 10)
 
3、向量运算:一般是对应元素之间的运算,所以两个或多个向量运算时,要求它们包含的元素个素相同(或一个是另一个的整数倍)。
例1:a <- 1:3; b <- 4:6; a * b; b^a
例2:a <- 1:3; b <- 4:9; a * b; b^a
 
4、获取向量某一个或多个子集,向量前的负号"-"表示去除相应内容。
例1:x <- c(3, 4, 5, 2, 6); x[1:2]; x[-(1:2)]
例2:x <- c(3, 4, 5, 2, 6); x[c(1, 2, 4, 1)]; x[-c(1, 2, 4, 1)]
例3:xx <- seq(1, by = 3, length = 10); xx[xx > 13]
例4:x <- 1:20; y <- -9:11; x[y > (1)] #注意最后一个是"NA"
 
5、主要向量运算函数。
例1:xx <- c(2, 6, 10, 8, 4)
sum(xx) #和
max(xx) #最大值
min(xx) #最小值
range(xx) #取值范围
mean(xx) #平均值
var(xx) #方差
sort(xx) #从小到大排序
rev(xx) #反排列, 所以从大到小排序应该是rev(sort(xx))
rank(xx) #单元值大小顺序
prod(xx) #乘积,所以阶乘是prod(1:n)
例2:x <- seq(1, 15, 2)
append(x, 20:30, after = 5) #插入数据
append(x, 20:30) #参数after缺省默认从向量的最后插入值
replace(x, c(2, 4, 6), -1) #替换函数
例3:state.name
match(c('Ohio', 'Wyoming'), state.name) #完全匹配函数
pmatch(c('Oh', 'Wy'), state.name) #部分匹配函数
state.name[pmatch(c('Oh', 'Wy'), state.name)]
例4:yy <- -9:10
all(yy > 0) #判断所有
all(yy > -10)
any(yy == 0) #判断部分
any(yy > 0)
any(yy < -10)
矩阵
矩阵(matrix)
矩阵生成函数matrix():matrix(data, nrow = , ncol = , byrow = F),其中,数据data是必须的,其他都是选择参数,可以不选。byrow = F默认为按列来排列数据,如果想要按行排列,令byrow = T。
1、对角矩阵和单位阵。
例1:x <- 1:6; diag(x) #对角矩阵
例2:y <- rep(1, 5); diag(y) #单位阵
 
2、矩阵下标
例1:xx <- matrix(1:20, 4, 5)
xx[2, 2]; xx[2, 3:5]; xx[3:4, 3:4]
xx[2, ]; xx[ , 2]
 
3、代数意义下的矩阵乘法"%*%"
例1:yy <- matrix(1:6, 3, 2); zz <- matrix(1:6, 2, 3)
yy %*% zz; zz %*% yy
 
4、矩阵行和列的维数
例1:xx <- matrix(1:20, 4, 5)
dim(xx) #行和列的维数
nrow(xx); ncol(xx) #行数和列数
 
5、矩阵的主要运算函数
例1:x <- 1:6; y <- as.matrix(x) #转换成矩阵
is.matrix(x); is.matrix(y) #判断是否矩阵
例2:   diag() #方阵对角线元素或者生成对角矩阵
apply() #对矩阵应用函数
eigen() #求特征值和特征向量
solve() #求逆矩阵
chol() #Choleski分解
svd() #奇异值分解
qr() #QR分解
det() #求行列式
dim() #给出行列数
t() #矩阵转置
 
6、矩阵合并
例1:aa <- matrix(1:6, 3, 2);  bb <- matrix(7:12, 3, 2)
cbind(aa, bb) #按列合并
rbind(aa, bb) #按行合并
 
7、矩阵apply()运算函数:语法是apply(data, dim, function),dim取1表示对行运用函数,取2表示对列运用函数。
例1:xx <- matrix(1:20, 4, 5)
colMeans(xx) #列均值
colSums(xx) #列和
其余大部分都要用到apply()函数
例2:xx <- matrix(1:20, 4, 5)
apply(xx, 2, mean) #列均值,等同于colMeans(xx)
apply(xx, 2, sum) #列和,等同于colMeans(xx),所以矩阵行和列的运算推荐用apply()。
apply(xx, 1, var) #行方差
apply(xx, 2, max) #每列最大值
apply(xx, 2, rev) #每列的数反排列
 
因子(factor)和有序因子(ordered factor)

一、因子的特点或性质

1、因子可视为C或JAVA语言中的枚举,适用于有限状态的表示。

2、因子不可以赋枚举集合外的值,如一个因子包含male,female,则不能再赋male和female以为的值,赋其他值会将该元素设置为空值。

因子用来存储类别变量(categorical variables)和有序变量,这类变量不能用来计算而只能用来分类或者计数。因子表示分类变量,有序因子表示有序变量。

在R语言中,因子(factor)表示的是一个符号、一个编号或者一个等级,即,一个点。例如,人的个数可以是1,2,3,4......那么因子就包括,1,2,3,4.....还有统计量的水平的时候用到的高、中、低,也是因子,因为他是一个点。与之区别的向量,是一个连续性的值,例如,数值中有1,1.1,1.2......可以作为数值来计算,而因子则不可以。如果用我自己的理解,简单通俗来讲:因子是一个点,向量是一个有方向的范围。

在R中,如果把数字作为因子,那么在导入数据之后,需要将向量转换为因子(factor),而因子在整个计算过程中不再作为数值,而是一个"符号"而已。

因子(factor)和有序因子(ordered factor)
因子用来存储类别变量(categorical variables)和有序变量,这类变量不能用来计算而只能用来分类或者计数。
因子表示分类变量,有序因子表示有序变量
生成因子数据对象的函数是factor(),语法是factor(data, levels, labels, ...),其中data是数据,levels是因子水平向量,labels是因子的
 
标签向量。
1、创建一个因子。
例1:colour <- c('G', 'G', 'R', 'Y', 'G', 'Y', 'Y', 'R', 'Y')
col <- factor(colour)
col1 <- factor(colour, levels = c('G', 'R', 'Y'), labels = c('Green', 'Red', 'Yellow')) #labels的内容替换colour相应位置对应levels的内容
col2 <- factor(colour, levels = c('G', 'R', 'Y'), labels = c('1', '2', '3'))
col_vec <- as.vector(col2) #转换成字符向量
col_num <- as.numeric(col2) #转换成数字向量
col3 <- factor(colour, levels = c('G', 'R'))
2、创建一个有序因子。
若因子需要有序,比如差,一般,好,很好,非常好,则可使用order参数:order=TRUE。
例1:score <- c('A', 'B', 'A', 'C', 'B')
score1 <- ordered(score, levels = c('C', 'B', 'A')); score1
3、用cut()函数将一般的数据转换成因子或有序因子。
例1:exam <- c(98, 97, 52, 88, 85, 75, 97, 92, 77, 74, 70, 63, 97, 71, 98, 65, 79, 74, 58, 59, 60, 63, 87, 82, 95, 75, 79, 96, 50, 88)
exam1 <- cut(exam, breaks = 3) #切分成3组
exam2 <- cut(exam, breaks = c(0, 59, 69, 79, 89, 100)) #切分成自己设置的组
attr(exam1, 'levels'); attr(exam2, 'levels'); attr(exam2, 'class')
ordered(exam2, labels = c('bad', 'ok', 'average', 'good', 'excellent')) #一个有序因子
 
数据框
数据框(data frame)
    数据框是一种矩阵形式的数据,但数据框中各列可以是不同类型的数据。数据框每列是一个变量,每行是一个观测。数据框可以看成是矩阵的推广,也可看作一种特殊的列表对象,很多高级统计函数都会用到数据框。
数据框用函数data.frame()生成,语法是:data.frame(data1, data2, ...)
1、生成一个数据框
例1:name <- c('Mr A', 'Mr B', 'Mr C'); group <- rep(1, 3); score <- c(69, 71, 92)
dd <- data.frame(name, group, score)
 
2、合并数据框
例1:name <- c('Ms C', 'Ms D'); group <- c(2, 2); score <- c(93, 99)
dd1 <- data.frame(name, score, group) #注意这里排列顺序与dd中不同
dd2 <- rbind(dd, dd1) #行合并结果与dd排列顺序一致,说明其中有一个匹配过程。
dd3 <- rbind(dd1, dd)
例2:age <- c(14, 15, 14, 16, 13)
dd4 <- cbind(dd2, age) #列合并
dd4[2, 3]; dd4$score[2]
 
3、"连接"函数
attach()和detach()函数是应用数据框时很有用的工具。attach()函数将数据框连接入当前工作空间,detach()取消连接。
如果不用attach(),需要用$提取数据框内某一列数据。
1、attach()和detach()函数的应用
例1:girl1 <- read.table('d:/girl1.txt', head = T) #读取数据
WT2
attach(girl1) #连接入当期工作空间
WT2 <- 12:13
mode(WT2) #结果时数值型
rm(WT2)
detach(girl1) #取消连接
WT2
girl1$WT2
 

-----R对象和数据组织---------------

来源:http://blog.csdn.net/enjoy_learn/article/details/52422501

R的数据对象:
---存储角度:数值型,字符型,逻辑型
---结构角度:向量(具有相同存储类型数据的集合)
                      矩阵(列:变量,行:观测)--二维表格
                    数组(多张二维表的集合)
                    数据框(与矩阵类似,用于存储多个存储类型不同的变量)
                    列表:向量、矩阵、数组、数据框的集合
-----------------------------------------------------------------
创建和访问R的数据对象
---(1)创建R的数据对象:对象名<-R常量或R函数
--- (2)访问R的数据对象:对象名或print(对象名)
----(3)查看R的数据对象的结构:str(对象名)
-----(4)管理R的数据对象:ls():显示当前工作区间的变量名列表
-------rm(对象名或对象名列表),remove(对象名):删除当前工作区间的指定对象。
-----------------------------------------------------------------------
   调用R的向量组织数据
判断数据对象是否为向量:is.vector(数据对象名)
创建只包含一个元素的向量:标量
------对象名<-R常量
-----(V4<-TRUE),幅值语句直接放入括号内,表示创建对象,并直接显示对象值
-----#开头的程序行为注释
 
创建包含多个元素的向量
---包含多个元素的目的是:保存一个变量到R中。----对象名<-R函数
最常用的R函数是C函数,seq,rep,
> holderage<-c(22,22,23,23)
> length(holderage)
[1] 4
> vehiclegroup<-rep("A",each=4)
> vehiclegroup
[1] "A" "A" "A" "A"
> vehiclleage<-seq(from=1,to=4,by=1)
> vehiclleage
[1] 1 2 3 4
> claimamt<-c(2312,2256,1064,1280)
> claimamt
[1] 2312 2256 1064 1280
> nclaims<-c(8,8,4,1)
> nclaims
[1] 8 8 4 1
> str(vehiclegroup)
 chr [1:4] "A" "A" "A" "
 
向量相同,可以使用赋值语句,向量元素相同,可借助重复函数和序列函数简化书写
 
rep重复函数
rep(起始值:终止值,each=重复次数)或times=重复次数
 (vehiclegroup<-rep(10:15,times=4))
 [1] 10 11 12 13 14 15 10 11 12 13 14 15 10 11 12 13 14 15 10 11 12 13 14 15
> (vehiclegroup<-rep(10:15,each=4))
 [1] 10 10 10 10 11 11 11 11 12 12 12 12 13 13 13 13 14 14 14 14 15 15 15 15
 
seq序列函数
   seq(from=起始值,to =终止值,by=步长)
    seq(from=起始值,to =终止值,by=个数)   
scan键盘数据读入函数
          R支持从键盘输入一组数据到指定向量中,函数书写:
                对象名<-scan()
            每个数据间以回车键分隔,所有数据输入完毕后,按住Ctrl+回车键表示结束输入。
Vector创建向量函数
        vector(length=元素个数),创建的初值默认为FALSE,需通过向量元素访问,给各元素赋予具体值
 vector(length=5)
[1] FALSE FALSE FALSE FALSE FALSE
 
访问向量中为元素
-----访问指定位置上的元素:
> a<-vector(length=10)
> a
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> a[1]<-1
> a[2:4]<-c(2,3,4)
> a
 [1] 1 2 3 4 0 0 0 0 0 0
> b<-seq(from=5,to=9,by=1)
> b
[1] 5 6 7 8 9
> a[5:9,10]<-c(b,10)
Error in a[5:9, 10] <- c(b, 10) : 矩阵里的下标数目不对
> a
 [1] 1 2 3 4 0 0 0 0 0 0
> a[c(5:9,10)]<-c(b,10)
> a
 [1]  1  2  3  4  5  6  7  8  9 10
-----利用位置向量访问指定位置上的元素
 
利用逻辑型位置向量访问指定位置上的元素,a[b],b的长度不够a的长度时,按b 先前的顺序取值
-------访问指定元素之外的元素
向量名[-位置常量];访问除第几个元素以外的元素
向量名[-位置常量1:位置常量2]
向量名[-c(5:9),10]
向量名[-位置向量名]

用R的矩阵组织数据,
可通过is函数判断数据对象是否为矩阵。
is.matrix(数据对象名)
2016/09/03 14:07
由向量创建矩阵:
cbind(向量名列表):各向量存储类型一致
ClaimData<-cbind(holderage,vehiclege,claimamt,nclaims) 
dim(矩阵名):显示矩阵行列数
colnames(ClaimData)  : 显示矩阵各列名称
colnames(ClaimData [,2:4])  显示矩阵指定列名称
rownames(ClaimData)<-c("1","2","3","4"),给矩阵各行命名
显示指定行名称:rownames(Claimdata[c(1,3),])
rbind(a,b)  行合并函数
------------由单个向量派生矩阵
矩阵中的元素已存在于一个向量中
matrix(向量名,nrow=行数,ncol=列数,byrow=TRUE/FALSE,...)
a<-matrix(a,nrow=5,ncol=6,byrow=FALSE,dilnames=list(dim1,dim2));
---------访问矩阵中的元素:
1)访问指定位置上的元素
矩阵名[行位置常量,列位置常量]
矩阵名[c(1,2),c(1,3)] 
2)访问指定行上的所有元素
head(矩阵名,n)
tail(矩阵名,n)
3)访问指定列上的所有元素
4)利用编辑窗口访问矩阵元素
fix(矩阵名)

---------------------------------------------------------------------------------------------------------------------------------------

数据框用于存储多个存储类型不尽相同的变量;
      统计                计算机
行:观测----------记录
列:变量----------域
判断数据对象是否为数据框
is.data.frame(数据对象名)  TRUE?FALSE
创建数据框
ChaimDataFrm<-data.frame(域名1=向量名1,域名2=向量名2,。。。)
创建数据表时,数据框中是空的,通过:numeric(0)创建一个不包含任何数据的数值型的域。
访问数据框
(1)矩阵方式访问
(2)数据框名$域名
        数据框名[["域名"]]
        数据框名[[域编号]]
还可:
        attach(数据框名)
        访问域名函数1
        访问域名函数2
        detach(数据框名)
还可:
    with(数据框名,{
            域访问函数1
            域访问函数2
            })
with内为局部环境,类似C语言里的局部变量。
若修改数据框中的值或增加新的域,需采用within函数
数据框名<-within(数据框名,{
                        域访问函数
                        域修改函数
                                })
在{ }内生成的新向量均默认加入数据框,成为新的域。

R语言基础:数组&列表&向量&矩阵&因子&数据框的更多相关文章

  1. R语言基础-数组和列表

    数组(array) 一维数据是向量,二维数据是矩阵,数组是向量和矩阵的直接推广,是由三维或三维以上的数据构成的. 数组函数是array(),语法是:array(dadta, dim),当中data必须 ...

  2. R语言基础入门

    请先安装好R和RStudio 如果不干别的,控制台就是一个内置计算器 2 * 3 #=> 6 sqrt(36) #=> 6, square root log10(100) #=> 2 ...

  3. R语言学习 第二篇:矩阵和数组

    向量是一维的,只有行这一个维度,没有其他维度.R可以创建更高维度的数据对象,例如,矩阵.数据框.数组,索引高维度的对象时,需要使用元素的下标.这些对象的下标都使用中括号[]和索引,第一个维度是row, ...

  4. 从零开始系列-R语言基础学习笔记之二 数据结构(二)

    在上一篇中我们一起学习了R语言的数据结构第一部分:向量.数组和矩阵,这次我们开始学习R语言的数据结构第二部分:数据框.因子和列表. 一.数据框 类似于二维数组,但不同的列可以有不同的数据类型(每一列内 ...

  5. R 语言-基础

    R语言 1997年成为GNU项目 开源免费 R官方网址 www.r-project.org R是数据分析领域的语言小巧灵活,通过扩展包来增强功能绘图功能代码简单 开发环境R + RStudio 1.数 ...

  6. R语言基础

    一.扩展包的基本操作语句R安装好之后,默认自带了"stats" "graphics"  "grDevices" "utils&qu ...

  7. R语言基础篇——数据对象

    1.基本数据类型(numeric,logical,character,NA,double,complex,integer) 2.日期变量 常用函数 Sys.Date()-返回系统当前的日期,Sys.t ...

  8. day05<Java语言基础--数组>

    Java语言基础(数组概述和定义格式说明) Java语言基础(数组的初始化动态初始化) Java语言基础(Java中的内存分配以及栈和堆的区别) Java语言基础(数组的内存图解1一个数组) Java ...

  9. R语言基础画图/绘图/作图

    R语言基础画图/绘图/作图 R语言基础画图 R语言免费且开源,其强大和自由的画图功能,深受广大学生和可视化工作人员喜爱,这篇文章对如何使用R语言作基本的图形,如直方图,点图,饼状图以及箱线图进行简单介 ...

随机推荐

  1. js 日期

    let date = new Date(); let year = date.getFullYear(); let money = money = date.getMonth() + 1; let d ...

  2. Unity UGUI 裁剪TTF字体

    BitBucket上找到了一个perl工程,font-optimizer.拉取代码到本地.为了运行它,还需要装Perl解释器,可以在Perl的官网上下载ActivePerl.装好ActivePerl后 ...

  3. BizTalk动手实验(十三)EDI解决方案开发配置

    1 课程简介 通过本课程熟悉EDI解决文案的开发与配置,本动手实验步骤及内容采用微软官方SDK完成,学员在实验过程中结合官方教程来完成本实验 2 准备工作 从BizTalk安装目录的SDK中将EDI ...

  4. windows 快捷键

    Windows 系统 f6  在同一个应用的不同窗口进行切换 ctrl-shift 拖动,创建文件快捷方式 shift 右键点击文件 可以出现复制路径的菜单 WIN键组合键 Windows Key + ...

  5. JavaScript 回调函数中的 return false 问题

    今天一个同事问了我一个问题,就是在 Ajax 方法中,请求成功后(success)的回调函数中根据响应的值来判断程序是否继续执行,他不解的是在回调函数中已经 return false 了,但是 Aja ...

  6. uglifyjs压缩批处理

    uglifyjs. 据说是用来压缩JS文件的,据说还能优化JS,据说是基于node的,还据说比Google Closure Compiler更带感. uglifyjs压缩批处理我们不可能每次都打开cm ...

  7. 找规律 ZOJ3498 Javabeans

    Javabeans are delicious. Javaman likes to eat javabeans very much. Javaman has n boxes of javabeans. ...

  8. 关于JavaScript的判断语句(1)

    if语句: if( 判断条件 ){ 判断结果为true执行语句: } if...else语句: if(判断条件){ 判断结果为true时执行的语句: }else{ 判断结果为false时执行语句: } ...

  9. 浏览器同步测试神器 — BrowserSync

    Browsersync 能让浏览器实时.快速响应文件更改(html.js.css.sass.less等)并自动刷新页面.更重要的是 Browsersync可以同时在PC.平板.手机等设备下进项调试,当 ...

  10. TF-IDF 文本相似度分析

    前阵子做了一些IT opreation analysis的research,从产线上取了一些J2EE server运行状态的数据(CPU,Menory...),打算通过训练JVM的数据来建立分类模型, ...