)
一、数据的基本类型和保存形式一数据的基本形式1、数字double/numeric缩写num---这里主要指的是实数且在R语言中在不加任何条件的情况下会默认精确到2位小数2、整数integer缩写int1L、2L……---在R中输入的形式是在整数后面加一个L如果不加的话则会被认为是num的形式3、虚数complex缩写cplx12i3-5i……4、逻辑logic缩写logiTrue、False---输入的时候可以写True或者False或者只写首字母T或F5、文字character缩写chr二数据的保存形式按照数据的维度dimensionality和一致性homogeneityR当中常见的数据形式分为如下几类维度一致的异质的1d向量vector列表list2d矩阵matrix数据框data frameNd阵列array一致性与数据的基本类型相关一致性的数据形式要求其中每个数据都保存成同一类型譬如全部保存成数字或文字。异质性没有要求1、一维数据1向量vector当数据类型一致时R当中最小单位的数据是向量它由一个、多个或一串同样类型的数据组成创建向量时用得是c语句如下即combine的缩写它的功能是将括号里的数据合并保存在左边的向量中Combine Values into a Vector or List#创建数字向量 var1 - c (1,2.5,4.5) var1 #创建文字向量 var2 - c (Hello,World) var2 #创建逻辑向量 var3 - c(TRUE,FALSE,T,F) var3 #创建数字向量 var1 - c (1,2.5,4.5) var1 [1] 1.0 2.5 4.5 #创建文字向量 var2 - c (Hello,World) var2 [1] Hello World #创建逻辑向量 var3 - c(TRUE,FALSE,T,F) var3 [1] TRUE FALSE TRUE FALSE在R当中我们用左箭头-来表示赋值的过程我们描述向量的大小的时候会用向量的长度来表示也就是里面包含了几个数据。举个例子上面创造的文字向量共包含“Hello”和“World”两个数据那么该向量的长度是2。当数据类型不一致时R会自动把向量保存成为较为灵活的形式#同时在向量中保存实数和整数时,都会被保存成实数 var4 - c(1.5,1L) var4 #同时在向量中保存实数和文字时都会被保存成文字 var5 - c(2,a) var5 #同时在向量中保存实数和整数时,都会被保存成实数 var4 - c(1.5,1L) var4 [1] 1.5 1.0 #同时在向量中保存实数和文字时都会被保存成文字 var5 - c(2,a) var5 [1] 2 a2列表list一个列表当中的数据类型可以不一致x - list(1:3,a,c(TRUE,FALSE,TRUE),list(2.3,5.9)) x x - list(1:3,a,c(TRUE,FALSE,TRUE),list(2.3,5.9)) x [[1]] [1] 1 2 3 [[2]] [1] a [[3]] [1] TRUE FALSE TRUE [[4]] [[4]][[1]] [1] 2.3 [[4]][[2]] [1] 5.9这是一个列表的例子这个列表李有四个元素第一个是包含三个整数数据集的向量第二个是包含一个文字“a”的向量第三个是包含三个逻辑数据的向量第四个则是另一个列表。一个列表可以是层叠式很复杂的结构那么我们为什么还说列表是一个维度呢因为在列表这个数据形式下面我们只能一层一层地打开它的结构获取其中的数据。这个操作相比于我们直接从一个表格中或数据框中获取数据还是有很大的不同的。如何快速查看数据结构#快速查看数据结构str(),structure的缩写 str(x) #快速查看数据结构str(),structure的缩写 str(x) List of 4 $ : int [1:3] 1 2 3 $ : chr a $ : logi [1:3] TRUE FALSE TRUE $ :List of 2 ..$ : num 2.3 ..$ : num 5.9这个功能对数据量很大结构很复杂的列表非常有用我们不用在concole里打开列表就可以掌握里面的内容2、二维数据1矩阵matrix——数据类型一致当构建矩阵时我们需要告诉R这个矩阵的长和宽分别是多少#创建一个长为2行宽为3列的矩阵 var6 - matrix(1:6,ncol3,nrow2) var6 #创建一个长为2行宽为3列的矩阵 var6 - matrix(1:6,ncol3,nrow2) var6 [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6另一种角度矩阵可以看成是向量的构成。即给向量添加一个矩阵的框架#先创建向量再添加矩阵的框架 var7 - 1:6 dim(var7) - c(3,2) var7 #先创建向量再添加矩阵的框架 var7 - 1:6 dim(var7) - c(3,2) var7 [,1] [,2] [1,] 1 4 [2,] 2 5 [3,] 3 6首先创建一个向量var7包含1到6六个数字再给他添加一个三行两列的矩阵框架就形成了一个矩阵我们把矩阵的框架称为Dimensions即dim(行数列数)。2数据框data frame—— 数据类型不一致数据框是平时最常见的数据类型#构建一个数据框包含三个变量每个变量的数据的数据类型可以不一致 var8 - data.frame(x1:3,yc(a,b,c),z0) str(var8) #构建一个数据框包含三个变量每个变量的数据的数据类型可以不一致 var8 - data.frame(x1:3,yc(a,b,c),z0) str(var8) data.frame: 3 obs. of 3 variables: $ x: int 1 2 3 $ y: chr a b c $ z: num 0 0 0我们可以在Environment窗口中也可以浏览该数据结构和矩阵不同的是在创建数据框的时候不需要告诉R数据框的长和宽具体是多少程序运行的时候会直接根据每个变量的长度来决定。但是如果变量的长度不一R可能会报错停止。3、数据形式的互换向量vector ↔ 矩阵matrix ↔ 数据框矩阵 → 【as.data.frame】 → 数据框数据框 → 【as.matrix】 → 矩阵矩阵 → 【as.vector】 → 向量思考数据框不要求其中的数据类型一致但是矩阵要求那么把一个异质的数据框转换成矩阵时会发生什么呢把这个矩阵再次转换成数据框又会发生什么呢因为文字的格式在R语言中是最灵活将数据框转换为矩阵时如果变量的数据类型不一致包括了数字、文字的话R会将所有数据都变成文字形式。#构建一个数据框包含三个变量每个变量的数据的数据类型可以不一致 var8 - data.frame(x1:3,yc(a,b,c),z0) str(var8) var9 - as.matrix(var8) str(var9) var10 - as.data.frame(var9) str(var10) #构建一个数据框 var8 - data.frame(x1:3,yc(a,b,c),z0) str(var8) data.frame: 3 obs. of 3 variables: $ x: int 1 2 3 $ y: chr a b c $ z: num 0 0 0 #将该数据框转变成矩阵 var9 - as.matrix(var8) str(var9) chr [1:3, 1:3] 1 2 3 a b c 0 0 0 - attr(*, dimnames)List of 2 ..$ : NULL ..$ : chr [1:3] x y z #再将矩阵转变成数据框 var10 - as.data.frame(var9) str(var10) data.frame: 3 obs. of 3 variables: $ x: chr 1 2 3 $ y: chr a b c $ z: chr 0 0 04、分类变量FactorR的数据框中常常将文字保存成分类变量包含两个部分数字value和 文字level类似于SPSS中的1 male 2 female#构建向量 sex - c(m,f,m,f,m,m) str(sex) #将向量转化为分类变量 sex_factor - factor(sex,levels c(m,f)) str(sex_factor) #构建向量 sex - c(m,f,m,f,m,m) str(sex) chr [1:6] m f m f m m #将向量转化为分类变量 sex_factor - factor(sex,levels c(m,f)) str(sex_factor) Factor w/ 2 levels m,f: 1 2 1 2 1 1二、基本运算与数据提取一基本运算1、加减、-2、乘除*、/3、平方、立方^2,^34、求根sqrt()5、指数exp()6、对数log()1、对数字进行计算#基本运算 11 2*3 6/3 3^2 sqrt(9) exp(2) log(7.390) #基本运算 11 [1] 2 2*3 [1] 6 6/3 [1] 2 3^2 [1] 9 sqrt(9) [1] 3 exp(2) [1] 7.389056 log(7.390) [1] 2.0001282、对向量进行计算#对向量进行计算 var11 - c(1,2,3) var11 var111 var11var11 var11*3 exp(var11) #对向量进行计算 var11 - c(1,2,3) var11 [1] 1 2 3 var111 [1] 2 3 4 var11var11 [1] 2 4 6 var11*3 [1] 3 6 9 exp(var11) [1] 2.718282 7.389056 20.085537对向量中每一个数字进行相加如果是向量和向量相加则对应位置相加3、对矩阵进行计算#对矩阵进行计算 var12 - matrix(datac(1,4,4,9,16,25),ncol3,nrow 2) var12 var125 #开根号则是对每一个位置上的数字进行开根号 sqrt(var12) #用t()对矩阵进行转置即Transpose t(var12) #矩阵的乘法需要矩阵的内积 var12 %*% t(var12) #对矩阵进行计算 var12 - matrix(datac(1,4,4,9,16,25),ncol3,nrow 2) var12 [,1] [,2] [,3] [1,] 1 4 16 [2,] 4 9 25 var125 [,1] [,2] [,3] [1,] 6 9 21 [2,] 9 14 30 #开根号则是对每一个位置上的数字进行开根号 sqrt(var12) [,1] [,2] [,3] [1,] 1 2 4 [2,] 2 3 5 #用t()对矩阵进行转置即Transpose t(var12) [,1] [,2] [1,] 1 4 [2,] 4 9 [3,] 16 25 #矩阵的乘法需要矩阵的内积 var12 %*% t(var12) [,1] [,2] [1,] 273 440 [2,] 440 722二数据提取1、从向量中提取数据#从向量中提取数据可以使用向量名[数据的位置] var13 - c(a,b,c) var13[1] var13[2] var13[3] #当需要从向量中提取多个不连续的数据时数据的位置可用向量表示因为向量是一维的[]中输入的数据的位置也应该是一维的 var13[c(1,3)] #从向量中提取数据可以使用向量名[数据的位置] var13 - c(a,b,c) var13[1] [1] a var13[2] [1] b var13[3] [1] c #当需要从向量中提取多个不连续的数据时数据的位置可用向量表示因为向量是一维的[]中输入的数据的位置也应该是一维的。不能写成var13[1,3]. var13[c(1,3)] [1] a c2、从矩阵中提取数据#从矩阵中提取数据可以使用矩阵名[所在行数所在列数]矩阵是二维数据故数据的位置应该有行数和列数两个参数 var14 - matrix(data c(a,b,c,d),ncol 2) var14 var14[1,1] var14[2,2] #只提取某一行 var14[1,] #只提取某一列 var14[,2] #从矩阵中提取数据可以使用矩阵名[所在行数所在列数]矩阵是二维数据故数据的位置应该有行数和列数两个参数 var14 - matrix(data c(a,b,c,d),ncol 2) var14 [,1] [,2] [1,] a c [2,] b d var14[1,1] [1] a var14[2,2] [1] d #只提取某一行 var14[1,] [1] a c #只提取某一列 var14[,2] [1] c d3、从数据框中提取数据与矩阵类似但数据框的每一个变量都是有名字的#从数据框中提取数据 var15 - data.frame(x1:3,yc(a,b,c),z0) var15 #方法一数据框名[所在行数所在列数] var15[1,1] var15[1,] var15[,3] #方法二数据框名[所在行数所在列的名字] var15[1,x] var15[,y] #使用$符号进行提取 var15$y #从数据框中提取数据 var15 - data.frame(x1:3,yc(a,b,c),z0) var15 x y z 1 1 a 0 2 2 b 0 3 3 c 0 #方法一数据框名[所在行数所在列数] var15[1,1] [1] 1 var15[1,] x y z 1 1 a 0 var15[,3] [1] 0 0 0 #方法二数据框名[所在行数所在列的名字] var15[1,x] [1] 1 var15[,y] [1] a b c #使用$符号进行提取 var15$y [1] a b c#以上内容均为医咖会R语言基础课程的个人笔记整理仅供参考学习