R语言学习笔记(一)——数据结构与基本运算
2015-08-14 17:03
399 查看
一·数据类型
R语言中主要数据类型有:
数值型(numeric),实数。实际上是整数型与双精度,默认是双精度。
字符型(character),“”或‘’之间的字符串。
逻辑型(logical),只有T(TRUE)或F(FALSE)。
复数型(complex),a+bi形式的复数。
原始型(raw),二进制形式保存。
默认值(missing value),当一个元素或值在统计时“不可得到”(not available)或“缺失值”(missing value)时,相关位置保留并赋予一个特定的NA值,任何NA的运算结果都是NA。用is.na()函数检测是否有NA值的存在,返回结果为TRUE或FALSE。
character, complex,double,integer,logical,NA,numeric等类型辨别函数均为is.__(),转换函数均为as.__()。
二·数据对象
R语言中的数据对象有6中:向量(vector)、矩阵(matrix)、数组(array)、因子(factor)、列表(list)和数据框(data frame)。
注意:在浮点运算中可能出现精度问题。
1.向量(vector)
向量是由相同基本元素构成的序列。用c()函数完成赋值。“<-"是赋值符号。
paste()函数可以将自变量对应元素连成字符串,长度不同时,较短的向量会背重复使用(对所有运算均适用)。
也可以用assign()函数对向量赋值。
向量的运算是对每个分量做运算。四则运算(+,-,*,/),其他运算,乘方:^ ,整除:%/%,取余数:%%
用“:”产生正则序列,如1:5表示1,2,3,4,5。“:”运算级别最高。
也可以用seq()函数产生有规律的序列,rep()产生重复各种对象。
向量运算常见函数
向量索引,取某一元素可用x[i]得到,也可通过其他灵活的赋值语句的到一个或多个元素的值。
2.矩阵(matrix)
矩阵是数据用行和列排列的长方形表格,是二维数组,单元必须是相同的数据类型。用matrix()函数生成,
matrix(data =NA,nrow=1, ncol=1, byrow=FALSE, dimnames = NULL)
假定A为m*n矩阵,则A的转置矩阵可用t()来计算。
3.数组(array)
向量(一维)和矩阵(二维)的推广(多维),用array()生成。
dim()可将向量转换成数组或矩阵。
运算法则与矩阵类似。
4.因子(vector)
因子变量代表不同可能的水平。用vector()生成。
levels()提取因子水平,ordered()产生因子排序。
5.列表(list)
元素、矩阵、数组必须是同一类型的数据,如数据对象有不同类型,可采用列表list()。
如LST <- list(...),则LST[[2]]访问列表第2个成分的值,LST[[2]][1:3]访问列表第2成分前3个元素。而LST[1]是选择列表的第1个分量,包含分量名。
也可用$符号返回对应成分。
length(),mode(),names()分别返回列表长度,数据类型,列表成分名。
6.数据框(data.frame)
分量必须是向量、因子、数值矩阵、列表或其他数据框;
数值、逻辑、因子保持原有格式,字符向量会被强制转换为因子;
以变量形式出现的向量结构必须保持长度一致,矩阵结构必须有一样的行数。
row.names(),col.names()变更行列名。
数据框的引用有多种方法,如a[ ,"score"], a[ ,3], a$score, a[["score"]],a[[3]]。
attach()数据框的变量“链接”到内存中,可以直接用数据框中的变量名访问。用detach()取消连接。
R语言中主要数据类型有:
数值型(numeric),实数。实际上是整数型与双精度,默认是双精度。
字符型(character),“”或‘’之间的字符串。
逻辑型(logical),只有T(TRUE)或F(FALSE)。
复数型(complex),a+bi形式的复数。
原始型(raw),二进制形式保存。
默认值(missing value),当一个元素或值在统计时“不可得到”(not available)或“缺失值”(missing value)时,相关位置保留并赋予一个特定的NA值,任何NA的运算结果都是NA。用is.na()函数检测是否有NA值的存在,返回结果为TRUE或FALSE。
character, complex,double,integer,logical,NA,numeric等类型辨别函数均为is.__(),转换函数均为as.__()。
二·数据对象
R语言中的数据对象有6中:向量(vector)、矩阵(matrix)、数组(array)、因子(factor)、列表(list)和数据框(data frame)。
注意:在浮点运算中可能出现精度问题。
1.向量(vector)
向量是由相同基本元素构成的序列。用c()函数完成赋值。“<-"是赋值符号。
paste()函数可以将自变量对应元素连成字符串,长度不同时,较短的向量会背重复使用(对所有运算均适用)。
也可以用assign()函数对向量赋值。
向量的运算是对每个分量做运算。四则运算(+,-,*,/),其他运算,乘方:^ ,整除:%/%,取余数:%%
用“:”产生正则序列,如1:5表示1,2,3,4,5。“:”运算级别最高。
也可以用seq()函数产生有规律的序列,rep()产生重复各种对象。
向量运算常见函数
函数 | 用途 |
length() | 求向量长度 |
mode() | 返回数据类型 |
min() | 最小值 |
max() | 最大值 |
range() | 向量范围 |
which.min(),which.max() | 何处取最值 |
mean() | 均值 |
median() | 中位数 |
var() | 方差 |
sd() | 标准差 |
sort() | 排序 |
rev() | 反排序 |
rank() | 求秩(数据排序中的相对位置) |
prod() | 求向量连乘积 |
append() | 向量中添加元素 |
sum() | 求和 |
replace() | 替换 |
match() | 匹配 |
pmatch() | 部分匹配 |
all() | 判断所有 |
any() | 判断部分 |
> x <- c(1,3,5) > x[2] #返回x向量的第2个元素 > (c(1,2,3)+4)[2] #先进行向量运算,再返回该向量的第2个元素 > x[c(1,3)] <- c(9,11) #将9和11赋值给x向量的第1和第3元素把i换成逻辑语句也可以对向量进行逻辑运算。例如:
> x <- c(1,3,5) > x < 4 #返回逻辑结果,及x向量的元素是否小于4 > x[x<4] #返回x向量里小于4的元素 > z <- c(-1,1:3,NA) > z[is.na(z)] <- 0 #将0赋值给z向量里的NA值 > z <- c(-1,1:3,NA) > y <- z[!is.na(z)] #将z里的非缺失值赋值给y这种方法可以用在对分段函数的定义上。
> x<-c(-3,-2,-1,0,5,7) > y<- numeric(length(x)) #生成与x向量长度相同的数值型向量 > y[x<0] <- 1-x[x<0] #求出x中小于0的元素对应位置,y对应位置用 1-x[x<0] 替代 > y[>=0] <- 1+x[x>=0] #求出x中大于等于0的元素对应位置,y对应位置用 1-x[x<0] 替代如果下标取值是负整数,则表示删除相应位置的元素。
> x <- 1:10 > x[-(1:5)] #删除x向量中的第1到第5个元素
2.矩阵(matrix)
矩阵是数据用行和列排列的长方形表格,是二维数组,单元必须是相同的数据类型。用matrix()函数生成,
matrix(data =NA,nrow=1, ncol=1, byrow=FALSE, dimnames = NULL)
假定A为m*n矩阵,则A的转置矩阵可用t()来计算。
矩阵函数 | 作用 |
t() | 转置 |
%*% | 矩阵乘法 |
* | 对应元素相乘 |
diag() | 取对角元素; 对向量应用则会产生对应的对角矩阵 只输入正整数生成对应维数的单位矩阵 |
solve() | 求逆 |
eigen() | 求特征值和特征向量 |
chol() | 正定矩阵Choleskey分解为上三角矩阵 |
svd() | A矩阵的奇异值分解(A=UDVT) |
qr() | QR分解(A=QR),qr.R(qr(A)),qr.Q(qr(A)) |
kronecker(A,B) | Kronecker积 |
dim() | 维数 |
nrow(),ncol() | 行数,列数 |
rowSums(),colSums() | 行列和 |
rowMeans(),colMeans() | 行列均值 |
lower.tri(),upper.tri() | 上三角、下三角矩阵(返回逻辑值) |
det() | 计算行列式的值 |
apply() | 可进行各种计算 |
rbind(),cbind() | 行、列合并 |
向量(一维)和矩阵(二维)的推广(多维),用array()生成。
dim()可将向量转换成数组或矩阵。
运算法则与矩阵类似。
4.因子(vector)
因子变量代表不同可能的水平。用vector()生成。
levels()提取因子水平,ordered()产生因子排序。
5.列表(list)
元素、矩阵、数组必须是同一类型的数据,如数据对象有不同类型,可采用列表list()。
如LST <- list(...),则LST[[2]]访问列表第2个成分的值,LST[[2]][1:3]访问列表第2成分前3个元素。而LST[1]是选择列表的第1个分量,包含分量名。
也可用$符号返回对应成分。
length(),mode(),names()分别返回列表长度,数据类型,列表成分名。
6.数据框(data.frame)
分量必须是向量、因子、数值矩阵、列表或其他数据框;
数值、逻辑、因子保持原有格式,字符向量会被强制转换为因子;
以变量形式出现的向量结构必须保持长度一致,矩阵结构必须有一样的行数。
row.names(),col.names()变更行列名。
数据框的引用有多种方法,如a[ ,"score"], a[ ,3], a$score, a[["score"]],a[[3]]。
attach()数据框的变量“链接”到内存中,可以直接用数据框中的变量名访问。用detach()取消连接。
相关文章推荐
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构揭秘一
- 数据结构之Treap详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)
- java数据结构和算法学习之汉诺塔示例
- Java数据结构及算法实例:三角数字
- Java数据结构之简单链表的定义与实现方法示例
- 数据结构之AVL树详解
- qqwry.dat的数据结构图文解释第1/2页
- JavaScript中数据结构与算法(五):经典KMP算法