day01 R语言笔记之向量、数组、因子、列表、数据框

目录

一、向量(vector)

1、向量类型 

2、向量元素的命名 

3、提取向量子集  

4、向量数值类型的转换

二、数组(matrix)

1、创建数组

2、数组命名

3、提取数组的子集

三、因子(factor)

1、创建因子

2、改变因子水平

四、列表(list)

1、创建列表

2、列表的命名

3、提取列表子集

4、列表的增删改

五、数据框(date.frame)

1、创建数据框

2、提取数据框子集


一、向量(vector)

向量是由一组类型相同的元素组成的序列,这些类型主要有数值型字符型逻辑型

1、向量类型 

①数值型

数值型向量的元素可分为整数型双精度型,R语言默认是双精度型

#定义一个双精度型向量

> x <- c(1,2,3)
> typeof(x)     #typeof() 函数的作用是查询变量的数据类型
[1] "double"

#定义一个整型向量

> y <- c(1L,2L,3L)
> typeof(y)
[1] "integer"

  • 生成步长为1或-1的序列(这种方法生成的是整数型向量
> x <- 1:5
> x
[1] 1 2 3 4 5
> y <- 5:1
> y
[1] 5 4 3 2 1
  • seq()生成有规律的序列(这种方法生成的是整数型向量
#from,to,by可以省略
> seq(from = 1,to = 5)     
[1] 1 2 3 4 5
> seq(from = 5,to = 1)
[1] 5 4 3 2 1
> seq(from = 1,to = 5,by=2)
[1] 1 3 5


#from可省略,by,length.out不可省略
> seq(from = 1,by=2,length.out = 5)      #起始值为1,步长为2,向量长度为5
[1] 1 3 5 7 9

②字符型向量

> x <- c("hello","R","!")
> x
[1] "hello" "R"     "!" 

③逻辑型向量

数组中只有TRUEFALSE,而且只能写成大写形式

> x <- c(TRUE,FALSE,TRUE)
> x
[1]  TRUE FALSE  TRUE

2、向量元素的命名 

①创建时命名

c(元素名1=元素1,元素名2=元素2,元素名3=元素3.......)

②创建后命名

names(向量名) <- c("元素名1","元素名2","元素名3"........)

> x <- c(a=1,b=2,c=3)
> y <- c(1,2,3)
> names(y) <- c("d","e","f")
> x
a b c 
1 2 3 
> y
d e f 
1 2 3 
> names(x)   #读取指定向量的元素名称
[1] "a" "b" "c"

3、提取向量子集  

注:向量中元素的起始位置是1!!!

> x <- 1:26
> names(x) <- letters

letters是内置的一个字符向量,有"a"~"z" 26个元素,若写成大写,里边的元素也会相应的变成大写字母!!

①正整数提取包含该元素的子集

> x[1]    #取一个元素
a 
1 

> x[c(2,2,4)]   #取多个元素,可重复取
b b d 
2 2 4 

> x[c(3.3,4.7)]   #若为浮点数,会先去掉小数点后的数据
c d 
3 4

> x[3:8]    #取连续的元素
c d e f g h 
3 4 5 6 7 8 

②负整数提取不含相应元素的子集

> x[-(2:23)]
 a  x  y  z 
 1 24 25 26 

注:正整数法和负整数法不能同时使用!!

③通过逻辑向量提取子集 

> y <- c(rep(TRUE,6),rep(FALSE,20))  #生成一个逻辑向量,前面6个为TRUE,后面20个为FALSE

> x[y]     #相应位置为TRUE的就提取出来
a b c d e f 
1 2 3 4 5 6 

> y <- x>21    #向量中大于21的就在y中相应的位置赋值TRUE,小于的就赋值为FALSE
> x[y]
 v  w  x  y  z 
22 23 24 25 26

注:逻辑向量y的元素数少于x的元素数时,逻辑向量会循环使用!!!

④通过元素名称提取子集

> x[c("a","b")]
a b 
1 2 

4、向量数值类型的转换

主要数据类型:

数值型(numeric)、字符型(character)、逻辑型(logical)和复数型(complex),数值型又分为整数型(integer)和双精度型(double)

①手动强制转换

强制转换函数 as.数据类型(),例如as.numeric() 强制转换为数值型。

> x <- c("1","2")
> x
[1] "1" "2"
> x <- as.numeric(x)
> x
[1] 1 2

②自动强制转换

在不同数据类型的数据进行运算时,会根据数据类型的灵活性,自动的将灵活性低的数据转换成灵活性高,然后再进行运算!!

灵活性由低到高:逻辑型整数型双精度型字符型

注:

  • 逻辑型转换为整数型时,TRUE会转为1,FALSE会转为0!!!
  • 数值型转换为逻辑型时,大于0的会转为TRUE,小于0的会转为FLASE!!!

二、数组(matrix)

1、创建数组

①matrix()    #将一维向量转换成二维数组(即矩阵)

x <- matrix(向量,nrow = 行数,ncol = 列数)

> x <- matrix(1:6,2,3)
> x
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

②arrar()     #创建任意维数的数组

x <- array(向量,dim = c(第一维长度,第二维长度........)

> x <- array(1:24,c(3,4,2))
> x
, , 1

     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

, , 2

     [,1] [,2] [,3] [,4]
[1,]   13   16   19   22
[2,]   14   17   20   23
[3,]   15   18   21   24

③diag()     #创建对角矩阵(二维数组)

x <- disg(a = 对角值,nrow = 长度)     #行列长度需一样

> x <- diag(1,3)
> x
     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    1    0
[3,]    0    0    1

④dim()       #返回数组各维度的长度,向量时会返回NULL

⑤nrow()     #返回数组的行数(第一维的长度)

⑥ncol()      #返回数组的列数(第二维的长度)

2、数组命名

①创建时命名

array(向量,dim=c(.....),dimnames=list(c(各行的名),c(各列的名)......))

> x <- array(1:12,c(2,6),list(c("a","b"),c("a","b","c","d","e","f")))
> x
  a b c d  e  f
a 1 3 5 7  9 11
b 2 4 6 8 10 12

②创建后命名

  • dimnames(数组名) <- list(c(各行的名),c(各列的名)......)
  • rownames(数组名) <- c("元素名1","元素名2","元素名3"........)  #行
  • colnames(数组名) <- c("元素名1","元素名2","元素名3"........)   #列

3、提取数组的子集

数组名[第一维度取值,第二维度取值,........,(drop = FALSE)]   

注:

  • 把各维度看作是一个向量,用向量提取子集的方法,不同维度的提取方式可以不同
  • 当提取的是数组的一行或者一列时,加上括号的内容会返回一个数组,不加会返回一个向量;
  • 若某一维度不写,则默认取全部
> x <- array(1:12,c(3,4))
> x[2:3,c(2,4)]
     [,1] [,2]
[1,]    5   11
[2,]    6   12

> x[,c(4)]
[1] 10 11 12

> x[,c(4),drop=FALSE]
     [,1]
[1,]   10
[2,]   11
[3,]   12

三、因子(factor)

作用:用于处理分类变量。

1、创建因子(factor)

因子的特点是只能包含预先定义好的元素,这些预先定义好的元素被称为水平。

水平实际上就是把因子中重复的元素去掉!!!

factor()     创建因子

levels()     返回因子水平(默认情况下,因子水平会自动进行排序)

> x <- c(1,3,3,3,5,4,4,5)
> y <- factor(x)
> y
[1] 1 3 3 3 5 4 4 5
Levels: 1 3 4 5

> levels(y)
[1] "1" "3" "4" "5"

ordered()  生成有序因子

> t = c(1,5,4,3)
> y<-ordered(x,levels=t)
> y
[1] 1 3 3 3 5 4 4 5
Levels: 1 < 5 < 4 < 3

gl(n=因子的个数,k=每个因子的数量)     快速创建因子,因子默认从1开始

> gl(3,2)
[1] 1 1 2 2 3 3
Levels: 1 2 3

str()   查看结构

> str(y)
 Factor w/ 4 levels "1","3","4","5": 1 2 2 2 4 3 3 4

Factor代表它是因子,levels后面的代表水平,冒号后面的表示因子在这个位置上的元素是水平中的第几个,例如:1就表示水平中的“1”,2就代表水平中的“3”,4就代表水平中的“5”,3就代表水平中的“4”,组合起来就是1 3 3 3 5 4 4 5。

向因子添加元素和水平

添加元素只能添加水平里面有的元素
> y[9]<-1
> y
[1] 1 3 3 3 5 4 4 5 1
Levels: 1 3 4 5

插入新水平
> levels(y)<-c(levels(y),2,6)
> y
[1] 1 3 3 3 5 4 4 5 1
Levels: 1 3 4 5 2 6

2、改变因子水平

去掉因子中的元素

去掉2
> y<-y[!(y %in% 2)]
> y
[1] 1 3 3 3 5 4 4 5 1
Levels: 1 3 4 5 2 6

去掉元素后,因子水平不会自动去掉!!

droplevels()  去掉多余的因子水平

> y<-droplevels(y)
> y
[1] 1 3 3 3 5 4 4 5 1
Levels: 1 3 4 5 6

四、列表(list)

定义:是一个由各种对象的有序集合构成的对象,列表可以包含不同种类的数据,如向量、矩阵、列表等。

1、创建列表

x <- list(元素1,元素2,元素3.......)

> x <- list("冷烬亿下",c(2,3),10,TRUE,list(1,"二"))
> x
[[1]]
[1] "冷烬亿下"

[[2]]
[1] 2 3

[[3]]
[1] 10

[[4]]
[1] TRUE

[[5]]
[[5]][[1]]
[1] 1

[[5]][[2]]
[1] "二"

2、列表的命名

与向量命名方式一样

  • 列表名 <- list(分量名1=分量1,........)
  • names(列表名) = c(分量名1,........)

length(列表名)     #返回列表/向量的长度,数组的元素数

3、提取列表子集

> x <- list("分量1"="冷烬亿下","分量2"=11,"分量3"=c(3,4,5))

①用方括号[]提取

特点:得到的结果是一个列表

  • 列表名[c(分量名1,分量名2.......)]        #分量只有一个时不需要用向量
  • 列表名[位置]
  • 列表名[逻辑型向量]       #逻辑型向量长度不够会循环使用
> x["分量1"]
$分量1
[1] "冷烬亿下"

> x[1]
$分量1
[1] "冷烬亿下"

> x[c(FALSE,TRUE,FALSE)]
$分量2
[1] 11

> x[c(TRUE,FALSE)]
$分量1
[1] "冷烬亿下"

$分量3
[1] 3 4 5

②用双层方括号[[]]提取

特点:只能提取一个分量,得到的结果是分量本身!

  • 列表名[[位置]]
> x[[1]]
[1] "冷烬亿下"

③用美元符号$提取

特点:列表必须是命名了的!

  • 列表名$分量名
> x$"分量1"
[1] "冷烬亿下"

4、列表的增删改

①增

  • 列表名$分量名 <- 分量值

②删

  • 提取的子集 <- NULL

③改

  • 提取的子集 <- 新值        #数量需要相同,用有多个时用列表
增
> x$"分量4" <- 123

删
x$'分量4' <- NULL

改
> x[c("分量1","分量2")] <- list(2,4)

五、数据框(date.frame)

  • 只有行列两个维度
  • 各列的数据类型可以不同

1、创建数据框

  • date.frame()

数据框名 <- data,frame(第一列名 = c(......),第二列 = c(......).............)

> d<-data.frame(
'姓名' = c('刘备','孙尚香'),
'性别' = c('男','女'),
'年龄' = c(40,25),
'国籍' = c('蜀','吴'))
> d
    姓名 性别 年龄 国籍
1   刘备   男   40   蜀
2 孙尚香   女   25   吴
  • as.data.frame()     将其他的数据结构转化为数据框
#将列表转化为数据框

> m<-list(1:5,6:10)
> m<-as.data.frame(m)
> m
  X1.5 X6.10
1    1     6
2    2     7
3    3     8
4    4     9
5    5    10

#将矩阵转化为数据框

> n<-matrix(1:12,3,4)
> n<-as.data.frame(n)
> n
  V1 V2 V3 V4
1  1  4  7 10
2  2  5  8 11
3  3  6  9 12

命名

> dimnames(m)<-list(c("第1行","第2行","第3行","第4行","第5行"),c("第1列","第2列"))
> m
      第1列 第2列
第1行     1      6
第2行     2      7
第3行     3      8
第4行     4      9
第5行     5     10

> rownames(n)<-c("第1行","第2行","第3行")
> colnames(n)<-c("第1列","第2列","第3列","第4列")
> n
      第1列 第2列 第3列 第4列
第1行     1     4     7    10
第2行     2     5     8    11
第3行     3     6     9    12

2、提取数据框子集

  • 矩阵提取法
> d[1:2,-2]
    姓名 年龄 国籍
1   刘备   40   蜀
2 孙尚香   25   吴

> d[-1,c("姓名","年龄")]
    姓名 年龄
2 孙尚香   25

> d[c(TRUE,FALSE),c(TRUE,FALSE)]
  姓名 年龄
1 刘备   40

#返回向量
> d[,"姓名"]
[1] "刘备"   "孙尚香"

#返回数据框
> d[,"姓名",drop=FALSE]
    姓名
1   刘备
2 孙尚香
  • 列表提取法
> d["姓名"]     #依旧是数据框
    姓名
1   刘备
2 孙尚香

> d[["姓名"]]
[1] "刘备"   "孙尚香"

> d$姓名
[1] "刘备"   "孙尚香"

未完待续。。。。。。。

  • 38
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷烬亿下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值