R语言基本知识(一)

一、数据的基本类型和保存形式

(一)数据的基本形式

1、数字(double/numeric,缩写num)

---这里主要指的是实数,且在R语言中,在不加任何条件的情况下会默认精确到2位小数

2、整数(integer,缩写int):1L、2L……

---在R中输入的形式是在整数后面加一个L,如果不加的话,则会被认为是num的形式

3、虚数(complex,缩写cplx):1+2i,3-5i……

4、逻辑(logic,缩写logi):True、False

---输入的时候可以写True或者False,或者只写首字母T或F

5、文字(character,缩写chr)

(二)数据的保存形式

按照数据的维度(dimensionality)和一致性(homogeneity),R当中常见的数据形式分为如下几类

维度一致的异质的
1d向量(vector)列表(list)
2d矩阵(matrix)数据框(data frame)
Nd阵列(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" "a"
 (2)列表(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,ncol=3,nrow=2)
var6
> #创建一个长为2行,宽为3列的矩阵
> var6 <- matrix(1:6,ncol=3,nrow=2)
> 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(x=1:3,y=c("a","b","c"),z=0)
str(var8)
> #构建一个数据框,包含三个变量,每个变量的数据的数据类型可以不一致
> var8 <- data.frame(x=1:3,y=c("a","b","c"),z=0)
> 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(x=1:3,y=c("a","b","c"),z=0)
str(var8)

var9 <- as.matrix(var8)
str(var9)

var10 <- as.data.frame(var9)
str(var10)
> #构建一个数据框
> var8 <- data.frame(x=1:3,y=c("a","b","c"),z=0)
> 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" "0"

4、分类变量(Factor)

R的数据框中常常将文字保存成分类变量

包含两个部分:数字(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,^3

4、求根(\sqrt{x}):sqrt()

5、指数(e^{x}):exp()

6、对数(lnx):log()

1、对数字进行计算

#基本运算
1+1
2*3
6/3
3^2
sqrt(9)
exp(2)
log(7.390)
> #基本运算
> 1+1
[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.000128

 2、对向量进行计算

#对向量进行计算
var11 <- c(1,2,3)
var11
var11+1
var11+var11
var11*3
exp(var11)
> #对向量进行计算
> var11 <- c(1,2,3)
> var11
[1] 1 2 3
> var11+1
[1] 2 3 4
> var11+var11
[1] 2 4 6
> var11*3
[1] 3 6 9
> exp(var11)
[1]  2.718282  7.389056 20.085537

 对向量中每一个数字进行相加,如果是向量和向量相加,则对应位置相加

3、对矩阵进行计算

#对矩阵进行计算
var12 <- matrix(data=c(1,4,4,9,16,25),ncol=3,nrow = 2)
var12
var12+5
#开根号则是对每一个位置上的数字进行开根号
sqrt(var12)
#用t()对矩阵进行转置,即Transpose
t(var12)
#矩阵的乘法需要(矩阵的内积) 
var12 %*% t(var12)
> #对矩阵进行计算
> var12 <- matrix(data=c(1,4,4,9,16,25),ncol=3,nrow = 2)
> var12
     [,1] [,2] [,3]
[1,]    1    4   16
[2,]    4    9   25
> var12+5
     [,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" "c"

 2、从矩阵中提取数据

#从矩阵中提取数据,可以使用矩阵名[所在行数,所在列数],矩阵是二维数据,故数据的位置应该有行数和列数两个参数
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" "d"

3、从数据框中提取数据

与矩阵类似,但数据框的每一个变量都是有名字的

#从数据框中提取数据
var15 <- data.frame(x=1:3,y=c("a","b","c"),z=0)
var15
#方法一:数据框名[所在行数,所在列数]
var15[1,1]
var15[1,]
var15[,3]
#方法二:数据框名[所在行数,所在列的名字]
var15[1,"x"]
var15[,"y"]
#使用$符号进行提取
var15$y

> #从数据框中提取数据
> var15 <- data.frame(x=1:3,y=c("a","b","c"),z=0)
> 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语言基础课程的个人笔记整理,仅供参考学习

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值