1. 程式人生 > >R語言中的資料結構

R語言中的資料結構

R語言中的資料結構

文字中對R語言中的資料結構進行總結,以說明和舉例的方式展現出來!
主要包含:向量,陣列,列表,資料框,因子,矩陣,和一些常用函式。
注:以下程式碼均可直接執行!

1、向量

向量,用於儲存數值型,字元型,邏輯型資料的一維陣列
同一向量中無法混雜不同模式的資料
舉例:

創造一個包含1到5的數字的向量

a<-c(1:5)
a

新增資料

b<-append(a,7)
b

新增向量(在第二個位置插入)

c<-append(a,c(8:10),after = 2)
c
a

求和函式

sum(a)
sum(b)
sum(c)

求最大函式

max(a)
max(b)
max(c)

求最小函式

min(a)
min(b)
min(c)

求平均函式

mean(a)
mean(b)
mean(c)

方差計算

f <- sum((a-mean(a))^2/4)

標準差

bb<- sqrt(f)
bb
f

求方差函式

var(a)
var(b)
var(c)

求標準差函式

sd(a)
sd(b)
sd(c)
從小到大排序
為false時從小到大
sort(a,decreasing = TRUE)#為true是從大到小
反向
rev(a)
rev(sort(a))

向量內元素相乘

prod(a)

階乘

prod(1:5)

2、矩陣

矩陣,用於儲存數值型,字元型,邏輯型資料的二維陣列
同一向量中無法混雜不同模式的資料
舉例:

建立一個3行4列的矩陣

mat<-matrix(c(1:12),nrow = 3,ncol = 4)
mat

維數獲取

dim(mat)

矩陣中的每個元素乘以2

mat_s<-mat*2
mat_s

滿足矩陣相乘的條件

左邊矩陣的列數=右邊矩陣的行數
mat2<-matrix(c(1:12),nrow = 4,ncol = 3)
mat2

矩陣相乘

mat %*% mat2

新增列名

colnames(mat) <- c('序號','語文','英語','數學')
mat

取出1行2列的值

mat[1,2]

取出第二行

mat[2,]

取出第二列

mat[,2]

取出1,2行1,2列的值

mat[c(1:2),c(1,2)]

取出2,3行的值

mat[c(2,3),]

邏輯判斷

判斷第二列是否大於5,返回true或者false
mat[,2] >=5
返回第二列大於等於5的行
mat[mat[,2]>=5,]
which
返回第四列大於等於12的行序列
which(mat[,4]>=12)
返回第四列大於等於12的行
mat[which(mat[,4]>=12),]
返回第四列大於等於11的行序列
which(mat[,4]>=11)
返回第四列大於等於11的行
mat[which(mat[,4]>=11),]

apply

檢視文件
?apply

對第二列的資料求均值

mean(mat[,2])

對行操作

apply(mat,1,mean)

對列操作

apply(mat,2,mean)

3、陣列

陣列,陣列與矩陣類似,但是維度可以大於二
舉例:

建立一個三維陣列

arr <- array(c(1:24),dim = c(2,3,4))
arr

獲取陣列維數

dim(arr)

獲取每一維的第二列第一行的元素

arr[1,2,]

獲取每一維的第一行元素

arr[1,,]

運用求和函式

sum(arr[1,2,])

4、資料框

資料框可以理解為一個高緯度的陣列,不同的列可以包含不同的模式
舉例:

name<- c('zs','lss','ww')
sex<-c('n','v','v')
age<-c(22,21,23)

建立一個數據框

dat<-data.frame(name,sex,age)
dat
檢視資料類
class(dat)#資料類
mode(dat)#資料大類(包含字元型,數值型,邏輯性)
typeof(dat)#資料細類(包含浮點型,int型。。。)

獲取第1行第三列的值

dat[1,3]

根據列名獲取第三個值

dat$age[3]

新增列

dat$score<-c(98,99,80)
dat

獲取成績為99的那一行

dat[which(dat$score==99),]

建立一個矩陣

dat2<-matrix(c(1:12),nrow = 3)
dat2

將矩陣轉化為資料框,資料框必須有列名

dat3<-as.data.frame(dat2)
dat3

根據列名獲取某一列資料

dat3$V1

連線

dat
dat3

dat0<-data.frame(name=name,weight=c(60:62))
dat0

資料框連線

dat0$age<-c(20:22)
dat0
dat01<-merge(dat,dat0,by.x = 'age',by.y = 'age')
dat01[which(dat01$name.x==dat01$name.y),]

合併

dat
dat0

#此處有錯誤,找找看

按行合併,列數必須相同

dat_r<-rbind(dat,dat0)
dat_r

按列合併,行數必須相同

dat_c<-cbind(dat,dat0)
dat_c

重新命名列名

names(dat0)<-c('name','score','agr')
dat0
dat0$sex<-c(23,23,24)
dat0

返回一個列表

lapply(dat$age,sum)

返回一個向量

sapply(dat0$score,sum)

5、因子

因子,名義型變數和有序型變數在R中稱為因子
舉例:

建立一個因子

a<-factor(c('A','B','C','C','A'))
a

levels因子可能的水平

#label因子標籤
#exclude從向量中剔除的水平值
b<-factor(c('A','B','C','D','C','A'),levels = c('A','B','C','D'),labels = c('A罩杯','B罩杯','C罩杯','D罩杯'))
b

colour<-c('G','G','R','R','Y','G','G','Y','G','R','G')
col<- factor(colour)
col
col1<-factor(colour,levels = c('G','R','Y'),labels = c('Green','Red','Yellow'))
col1
col2<-factor(colour,levels = c('G','R','Y'),labels = c('1','2','3'))
col2

class(col2)
typeof(col2)
mode(col2)

轉換成一個向量

as.vector(col2)

#ordered建立一個有序的因子
score<-c('A','B','A','C','B')
score1<-ordered(score)
score1
score1<-ordered(score,levels=c('C','B','A'))
score1

#cut(建立有序型變數)
exam<-c(98, 97, 52, 88, 85, 75, 97, 92, 77, 74, 70, 63, 97, 71, 98, 65, 79, 74, 58, 59, 60, 63, 87, 82, 95, 75, 79, 96, 50, 88)
exam1<-cut(exam,breaks = 3)#分成三組
exam1
#區間步長
(max(exam)-min(exam))/3

#常用函式tapply()
gender<-c('f','m','m','m','f')
age<-c(12,35,32,34,25)
#tapply(vector, index, function)
tapply(age, gender, mean)

6、列表

列表,列表為一些物件的有序集合,包含向量,矩陣,資料框,或者其他列表。
舉例:

列表可以包含數字,字串,向量。。。

a<-2
b<-'abc'
c<-c(1:4)
l<-list(a,b,c)
l
l[[2]]
l[[3]]

列表索引

l<-list(a=a,b=b,c=c)
l
l$c

繫結列表

attach(l)
a
c

轉化為向量

l<-unlist(l)
l
l[5]

計算操作

x<-list(a=1,b=c(1:4),c=c(3:6))
x

返回一個列表

lapply(x,sum)
lapply(x,mean)

lapply(x,sum)[[2]]

返回一個向量

sapply(x,sum)
sapply(x,mean)
sapply(x,mean)[2]
sapply(x,mean)