python怎么对数据框中第一列相同元素求第二列的均值_R语言系列 数据结构1

【免责声明:本文用于教学】

03. 数据结构I—向量,矩阵,多维数组

6afdebb810e2b1db8b18f0b9cb3e7657.png

一些术语:

  • 在R中,对象(object)是指可以赋值给变量的任何事物,包括常量、数据结构、函数,甚至图形。对象都拥有某种模式,描述了此对象是如何存储的,以及某个类,像print这样的泛型函数表明如何处理此对象。
  • 数据框(data frame)是R中用于存储数据的一种结构:列表示变量,行表示观测。在同一个数据框中可以存储不同类型(如数值型、字符型)的变量。数据框将是你用来存储数据集的主要数据结构。
  • 因子(factor)是名义型变量或有序型变量。

一、向量(一维数据)

向量是R语言中最基本的数据类型,是以一维数组管理数据的一种对象类型,可以是数值型、字符型、逻辑值型、复数型。

注意:同一向量不能混杂多种不同类型的数据。

  1. 创建向量

通过函数c()实现组合功能,例如

> x1<-c(2,3,5,7,10)

> x1

[1] 2 3 5 7 10

> x2<-c("a","b","c")

> x2

[1] "a" "b" "c"

注意,单个向量中的数据必须拥有相同的类型或模式(数值型、字符型或逻辑型)。同一向量中无法混杂不同模式的数据。

  1. 向量索引
  2. 下标索引(注意:R中下标是从1开始的),例如

x1[1]——返回x1的第1个元素

x1[-1]——返回除第一个元素之外的所有元素

x1[c(2:4)]——返回x1的第2至4个元素

x1[-c(2:4)]——返回x1的除第2至4元素之外的所有元素

  1. 名称索引

先给向量中的每个元素命名,再通过名称访问对应的元素:

> names(x1)<-c("two","three","five","seven","ten")

> x1[c("three","seven")]

three seven

3 7

(3)which元素位置

通过函数which()返回逻辑向量中为TRUE的位置;

which.max(x1)返回向量x1中最大值所在的位置;

which.min(x1)返回向量x1中最小值所在的位置。

> x1<-c(2,3,5,7,10)

> x1[which(x1>3 & x1<8)]

[1] 5 7

> x1[which.max(x1)]

[1] 10

(4)subset生成子集

检索向量中满足条件的元素,提取出来:

subset(x1,x1>3 & x1<8)

[1] 5 7

(5)match匹配

match(x1,x2) 逐个检查向量x1中元素是否在向量x2中,若是则返回该元素,否则返回NA:

> x1<-c(2,3,5,7,10)

> x2=1:4

> match(x1,x2)

[1] 2 3 NA NA NA

(6)%in%检查是否属于

x1 %in% x2 逐个判断向量x1中元素是否属于向量x2:

> x1 %in% x2

[1] TRUE TRUE FALSE FALSE FALSE

  1. 向量的编辑

对已创建向量进行增加或删除元素。

(1)增加元素

> x<-1:5

> x

[1] 1 2 3 4 5

> x<-c(x,c(6,7,8))

> x

[1] 1 2 3 4 5 6 7 8

x[10]=10

> x

[1] 1 2 3 4 5 6 7 8 NA 10

length(x)

[1] 10

(2)删除元素

> x=1:8

> x

[1] 1 2 3 4 5 6 7 8

> x<-x[-c(3,5)]

> x

[1] 1 2 4 6 7 8

> x<-x[-1]

> x

[1] 2 4 6 7 8

4.向量排序

函数sort(),基本格式:

sort(x,decreasing=FALSE, na.last= FALSE,...)

其中,x为排序对象(数值型或字符型);decreasing默认为FALSE即升序,TURE为降序;na.last默认为FALSE,若为TRUE,则将向量中的NA值放到序列末尾。

函数rank(),返回值是该向量中对应元素的“排名”。

函数order(),返回值是对应“排名”的元素所在向量中的位置,例如,

> x<-c(1,5,8,2,9,7,4)

> x

[1] 1 5 8 2 9 7 4

> order(x)

[1] 1 4 7 2 6 3 5

说明:默认按升序,排名第2的元素在原向量的第4个位置。

函数rev(),将序列进行反转,即1,2,3变成3,2,1

5.创建等差序列

函数seq(),基本格式为:

seq(from=...,to=...,by=...,length.out=...,along.with =...)

其中,from设置首项(默认为1);to设置尾项;by设置等差值(默认为1或-1);length.out设置序列长度;along.with以该参数的长度作为序列长度。

根据需要设置某几个参数即可,seq(17)同seq(1,17)同1:17

6.创建重复序列

函数rep(),基本格式为:

rep(x,times=...,length.out=...,each=...)

其中,x为要重复的序列;times设置序列重复次数;length.out设置产生的序列的长度;each设置每个元素分别重复的次数(默认为1)。

> x=1:3

> x

[1] 1 2 3

> rep(x,2)

[1] 1 2 3 1 2 3

> rep(x,each=2)

[1] 1 1 2 2 3 3

> rep(x,c(2,1,2)) #按照规则重复序列中的各元素

[1] 1 1 2 3 3

> rep(x,each=2,length.out=4)

[1] 1 1 2 2

> rep(x,each=2,times=3)

[1] 1 1 2 2 3 3 1 1 2 2 3 3 1 1 2 2 3 3

二、矩阵(二维数据)

矩阵是二维数组,可以描述二维数据,也要求矩阵内各元素有相同的类型。

1.创建矩阵

函数matrix(),基本格式为:

matrix(x, nrow=..., ncol=..., byrow=..., dimnames=...)

其中,x为数据向量作为矩阵的元素;nrow设定行数;ncol设定列数;byrow设置是否按行填充,默认为FALSE(按列填充);dimnames用字符型向量表示矩阵的行名和列名。

> x<-1:6

> x

[1] 1 2 3 4 5 6

> a<-matrix(x,nrow=3,ncol=2,byrow=T)

> a

[,1] [,2]

[1,] 1 2

[2,] 3 4

[3,] 5 6

> b<-matrix(x)

> b

[,1]

[1,] 1

[2,] 2

[3,] 3

[4,] 4

[5,] 5

[6,] 6

> dim(b)=c(3,2)

> b

[,1] [,2]

[1,] 1 4

[2,] 2 5

[3,] 3 6

> c<-matrix(x,nrow=3,ncol=2,byrow=F,dimnames=list(c("r1","r2","r3"), c("c1","c2")))

> c

c1 c2

r1 1 4

r2 2 4

r3 3 6

函数as.vector(),可将矩阵转化为向量,元素按列读取。

> as.vector(c)

[1] 1 2 3 4 5 6

2.矩阵索引

a[i,j]——返回矩阵a的第i行,第j列的元素

a[i,]——返回矩阵a的第i行

a[,j]——返回矩阵a的第j列

a[c(i:j),]——返回矩阵a的第i至第j行

a[,j]——返回矩阵a的第i行,第j列的元素

也可按名称索引:

c["r2","c1"]——返回矩阵c的第r2行,第c1列的元素2

3.矩阵的编辑

函数rbind(A,B),纵向合并(增加行),要求列数相同;

函数cbind(C,D),衡向合并(增加列),要求行数相同。

注意:rbind(A,1)相当于给矩阵A增加一行“1”。

a[-1,],删除矩阵a的第一行

a[,-1],删除矩阵a的第一列

a[-c(2:4),],删除矩阵a的第2至4行

4.矩阵的运算

+-*/——四则运算(要求矩阵维数相同)

colSums()——对矩阵的各列求和

rowSums()——对矩阵的各行求和

colMeans()——对矩阵的各列求均值

rowMeans()——对矩阵的各行求均值

t()——对矩阵转置

det()——返回方阵的行列式

crossprod()——返回两个矩阵的内积

outer()——返回矩阵的外积(叉积)

%*%——矩阵乘法(要求左阵的列数=右阵的行数)

diag()——取矩阵对角线元素生成对角矩阵,若对象是向量,则以该向量作为对角元素

solve()——返回逆矩阵(要求矩阵可逆)

eigen()——返回矩阵的特征值与特征向量

三、多维数组(高维数据)

数组与矩阵类似,是矩阵的扩展,维度≥3. 也要求数组中各元素有相同的类型。

1.创建多维数组

函数array(),基本格式为:

array(x,dim=...,dimnames=...)

其中,x为数据向量作为多维数组的元素;dim设置多维数组各维度的维数;dimnames设置多维数组各维度的名称。

> x<-1:30

> dim1<-c("A1","A2","A3")

> dim2<-c("B1","B2","B3","B4","B5")

> dim3<-c("C1","C2")

> a<-array(x,dim=c(3,5,2),dimnames = list(dim1,dim2,dim3))

> a

, , C1

B1 B2 B3 B4 B5

A1 1 4 7 10 13

A2 2 5 8 11 14

A3 3 6 9 12 15

, , C2

B1 B2 B3 B4 B5

A1 16 19 22 25 28

A2 17 20 23 26 29

A3 18 21 24 27 30

2.多维数组索引

第3个维度姑且称为“页”。

a[2,4,2]——返回第2页,第2行,第4列的元素26

或按各维度名称索引

a["A2","B4","C2"]——同a[2,4,2]

a[,,2]——返回第2页

dim(a)——返回多维数组a的各维度的维数3 5 2

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页