R語言中的資料結構
阿新 • • 發佈:2018-12-02
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)