R语言实战学习笔记-高级数据管理
生活随笔
收集整理的這篇文章主要介紹了
R语言实战学习笔记-高级数据管理
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?
本文將從以下幾個(gè)方面介紹R語言中的數(shù)據(jù)管理,1.數(shù)據(jù)處理函數(shù) 2.控制流 3.用戶自定義函數(shù) 4.整合和重構(gòu)
1.數(shù)據(jù)的處理函數(shù)
#實(shí)例 x<-c(1,2,3,4,5,6,7,8,9) y<-mean(x) #冗長的方式 n<-length(x) #求均值 meanx<-sum(x)/n #求標(biāo)準(zhǔn)差 css<-sum((x-meanx)^2) sdx<-sqrt(css/(n-1)) print(sdx) [1] 2.738613
概率函數(shù):
#繪制正太分布曲線 x<-pretty(c(-3,3),30) y<-dnorm(x) plot(x,y,type="l",xlab="Normal Deviate",ylab="Density",yaxs="i") #偽隨機(jī)數(shù) #生成服從正太分布的偽隨機(jī)數(shù) runif(5) #手動設(shè)置種子,重現(xiàn)上上次的結(jié)果 set.seed(1234) runif(5) [1] 0.1137034 0.6222994 0.6092747 0.6233794 0.8609154 set.seed(1234) runif(5) [1] 0.1137034 0.6222994 0.6092747 0.6233794 0.8609154在模擬研究和蒙特卡洛方法中,經(jīng)常需要獲取來自給定均值向量和協(xié)方差陣的多元正太分布的數(shù)據(jù),MASS中mvrnorm()函數(shù)可以讓這個(gè)問題變得容易:
library(MASS) options(digits=3) #設(shè)置隨機(jī)數(shù)種子 set.seed(1234) mean<-c(230.7,146.7,3.6) #制定均值向量、協(xié)方差陣 sigma<-matrix(c(15360.8,6721.2,-47.1,6721.2,4700.9,-16.5,-47.1,-16.5,0.3),nrow=3,ncol=3) #生成數(shù)據(jù) mydata<-mvrnorm(500,mean,sigma) mydata<-as.data.frame(mydata) names(mydata)<-c("y","x1","x2") #查看結(jié)果 dim(mydata) head(mydata,n=10) y x1 x2 1 98.8 41.3 3.43 2 244.5 205.2 3.80 3 375.7 186.7 2.51 4 -59.2 11.2 4.71 5 313.0 111.0 3.45 6 288.8 185.1 2.72 7 134.8 165.0 4.39 8 171.7 97.4 3.64 9 167.2 101.0 3.50 10 121.1 94.5 4.10字符處理函數(shù):
?數(shù)據(jù)處理難題的解決方案:
#限定輸出的小數(shù)點(diǎn)后的數(shù)字的位數(shù)為2 options(digits=2) Student<-c("John Davis","Angela Williams","Bullwinkle Moose","David Jones","Janice Markhammer","Cheryl Cushing","Reuven Ytzrhak","Greg Knox","Joel England","Joel England") Math<-c(502,600,412,538,512,492,410,625,573,522) Science<-c(95,99,80,82,75,85,80,95,89,86) English<-c(25,22,18,15,20,28,15,30,27,18) roster<-data.frame(Student,Math,Science,English) #將變量標(biāo)準(zhǔn)化 z<-scale(roster[,2:4]) #輸出的結(jié)果為: Math Science English [1,] -0.234 1.078 0.587 [2,] 1.145 1.591 0.037 [3,] -1.500 -0.847 -0.697 [4,] 0.273 -0.590 -1.247 [5,] -0.093 -1.489 -0.330 [6,] -0.374 -0.205 1.137 [7,] -1.528 -0.847 -1.247 [8,] 1.497 1.078 1.504 [9,] 0.765 0.308 0.954 [10,] 0.048 -0.077 -0.697 #求各行的平均值 score<-apply(z,1,mean) #將平均值放到花名冊中 roster<-cbind(roster,score) #尋找成績的分界點(diǎn) y<-quantile(score,c(0.8,0.6,0.4,0.2)) roster$grade[score>=y[1]]<-"A" roster$grade[score<y[1]&score>=y[2]]<-"B" roster$grade[score<y[2]&score>=y[3]]<-"C" roster$grade[score<y[3]&score>=y[4]]<-"D" #拆分字符串 name<-strsplit((roster$Student)," ") #提取拆分的字符串 Lastname<-sapply(name, "[",2) Firstname<-sapply(name, "[",1) #將拆分的字符串添加到花名冊中,并刪除name roster<-cbind(Firstname,Lastname,roster[,-1]) roster<-roster[order(Lastname,Firstname),] roster #輸出結(jié)果 Student Math Science English score grade 1 John Davis 502 95 25 0.48 B 2 Angela Williams 600 99 22 0.92 A 3 Bullwinkle Moose 412 80 18 -1.01 <NA>4 David Jones 538 82 15 -0.52 D 5 Janice Markhammer 512 75 20 -0.64 D 6 Cheryl Cushing 492 85 28 0.19 C 7 Reuven Ytzrhak 410 80 15 -1.21 <NA>8 Greg Knox 625 95 30 1.36 A 9 Joel England 573 89 27 0.68 B 10 Joel England 522 86 18 -0.24 C2.控制流
- 語句(statement)是一條單獨(dú)的R語句或者一組符合的語句(包含在花括號{}中的一組R語句,使用分號分隔)
- 條件(cond)是一條最終被解釋為真或假的表達(dá)式
- 表達(dá)式(expr)是一天數(shù)值或字符串的求值語句
- 序列(seq)是一個(gè)數(shù)值或字符串序列
3.用戶自定義函數(shù)
#函數(shù)的基本結(jié)構(gòu) myfunction<-function(arg1,arg2,……){statementsreturn(object) } #函數(shù)實(shí)例 #函數(shù)實(shí)例 mystats<-function(x,parametric=TRUE,print=FALSE){if(parametric){center<-mean(x);spread<-sd(x)}else{center<-median(x);spread<-mad(x)}if(print¶metric){cat("Mean=",center,"\n","SD=",spread,"\n")}else if(print&!parametric){cat("Median=",center,"\n","MAD=",spread,"\n")}result<-list(center=center,spread=spread)return(result) } set.seed(1234) x<rnorm(500) y<-mystats(x) print(y) #輸出結(jié)果 print(y) 80% 60% 40% 20% 0.73 0.30 -0.35 -0.71 #含有switch的自定義函數(shù) mydate<-function(type="long"){switch(type,long=format(Sys.time(),"%A %B %Y"),short=format(Sys.time(),"%m-%d-%y"),cat(type,"is not a recognized type\n")) } mydate("long") [1] "星期四 四月 2018" mydate("short") [1] "04-19-18" mydate() [1] "星期四 四月 2018" mydate("medium") medium is not a recognized type4.整合與重構(gòu)
#數(shù)據(jù)集的轉(zhuǎn)置 cars<-mtcars[1:5,1:4] cars #輸出結(jié)果 mpg cyl disp hp Mazda RX4 21 6 160 110 Mazda RX4 Wag 21 6 160 110 Datsun 710 23 4 108 93 Hornet 4 Drive 21 6 258 110 Hornet Sportabout 19 8 360 175 #利用t()函數(shù)轉(zhuǎn)置 t(cars) Mazda RX4 Mazda RX4 Wag Datsun 710 Hornet 4 Drive Hornet Sportabout mpg 21 21 23 21 19 cyl 6 6 4 6 8 disp 160 160 108 258 360 hp 110 110 93 110 175 #數(shù)據(jù)集的整合 options(digits=3) attach(mtcars) aggdata<-aggregate(mtcars,by=list(cyl,gear),FUN=mean,na.rm=TRUE) aggdata #輸出的結(jié)果集Group.1 Group.2 mpg cyl disp hp drat wt qsec vs am gear 1 4 3 21.5 4 120 97 3.70 2.46 20.0 1.0 0.00 3 2 6 3 19.8 6 242 108 2.92 3.34 19.8 1.0 0.00 3 3 8 3 15.1 8 358 194 3.12 4.10 17.1 0.0 0.00 3 4 4 4 26.9 4 103 76 4.11 2.38 19.6 1.0 0.75 4 5 6 4 19.8 6 164 116 3.91 3.09 17.7 0.5 0.50 4 6 4 5 28.2 4 108 102 4.10 1.83 16.8 0.5 1.00 5 7 6 5 19.7 6 145 175 3.62 2.77 15.5 0.0 1.00 5 8 8 5 15.4 8 326 300 3.88 3.37 14.6 0.0 1.00 5在結(jié)果中,Group.1表示氣缸數(shù)量(4,6,8),Group.2代表檔位數(shù)(3,4,5)。舉例來說,擁有4個(gè)氣缸和3個(gè)檔位車型的每加侖汽油行駛英里數(shù)均值為21.5
重構(gòu)和整合數(shù)據(jù)集的萬能工具-reshape2
ID<-c(1,1,2,2) Time<-c(1,2,1,2) X1<-c(5,3,6,2) X2<-c(6,5,1,4) mydata<-data.frame(ID,Time,X1,X2) mydata #輸出結(jié)果為 ID Time X1 X2 1 1 1 5 6 2 1 2 3 5 3 2 1 6 1 4 2 2 2 4library(reshape2) md<-melt(mydata,id=c("ID","Time")) md #輸出結(jié)果 ID Time variable value 1 1 1 X1 5 2 1 2 X1 3 3 2 1 X1 6 4 2 2 X1 2 5 1 1 X2 6 6 1 2 X2 5 7 2 1 X2 1 8 2 2 X2 4 #執(zhí)行整合 dcast(md,ID~variable,mean) ID X1 X2 1 1 4 5.5 2 2 4 2.5 dcast(md,Time~variable,mean) Time X1 X2 1 1 5.5 3.5 2 2 2.5 4.5 dcast(md,ID~Time,mean) ID 1 2 1 1 5.5 4 2 2 3.5 3 dcast(md,ID+Time~variable) ID Time X1 X2 1 1 1 5 6 2 1 2 3 5 3 2 1 6 1 4 2 2 2 4 dcast(md,ID+variable~Time) ID variable 1 2 1 1 X1 5 3 2 1 X2 6 5 3 2 X1 6 2 4 2 X2 1 4 dcast(md,ID~variable+Time) ID X1_1 X1_2 X2_1 X2_2 1 1 5 3 6 5 2 2 6 2 1 4轉(zhuǎn)載于:https://www.cnblogs.com/jackjoin/p/8878199.html
總結(jié)
以上是生活随笔為你收集整理的R语言实战学习笔记-高级数据管理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Luogu】P4462异或序列(莫队)
- 下一篇: 在拉取和推送都存在,冲突时,用命令行解决