99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀R語(yǔ)言筆記之語(yǔ)法篇
R語(yǔ)言筆記之語(yǔ)法篇
2017-01-13
收藏

R語(yǔ)言筆記之語(yǔ)法篇

R語(yǔ)言基礎(chǔ)之語(yǔ)法

分支結(jié)構(gòu)If…else…和 Ifelse()函數(shù)
Ifelse()函數(shù)是支持向量化計(jì)算的,ifelse(判斷條件,為真的時(shí)候返回的變量,條件為假的時(shí)候返回的變量)。
舉例
> (Brand=paste(c('Brand'),1:9,sep=''))
[1] "Brand1" "Brand2" "Brand3" "Brand4" "Brand5" "Brand6" "Brand7" "Brand8" "Brand9"
> (PName=paste(c('Dell'),1:9,sep=''))
[1] "Dell1" "Dell2" "Dell3" "Dell4" "Dell5" "Dell6" "Dell7" "Dell8" "Dell9"
> (Men=rep(c('1G','2G','4G'),times=3))
[1] "1G" "2G" "4G" "1G" "2G" "4G" "1G" "2G" "4G"
> (Feq=rep(c('2.2G','2.8G','3.3G'),each=3))
[1] "2.2G" "2.2G" "2.2G" "2.8G" "2.8G" "2.8G" "3.3G" "3.3G" "3.3G"
> (Price=rep(c(1000,2000,5000),3))
[1] 1000 2000 5000 1000 2000 5000 1000 2000 5000
> PC=data.frame(Brand,PName,Men,Feq,Price)
> #初始化,先為每個(gè)電腦都先打上Cheap標(biāo)簽
> PC$PD = rep('Cheap',9)
> for (i in 1:nrow(PC)){  #遍歷PC數(shù)據(jù)框
+   if(PC[i,'Price']>3000){
+     #當(dāng)價(jià)格大于3000的時(shí)候,就改成Expensive
+     PC[i,'PD']='Expensive'
+   }
+ }
> PC #從輸出結(jié)果來(lái)看,每個(gè)品牌的電腦,都被標(biāo)定了價(jià)格。
   Brand PName Men  Feq Price        PD
1 Brand1 Dell1  1G 2.2G  1000     Cheap
2 Brand2 Dell2  2G 2.2G  2000     Cheap
3 Brand3 Dell3  4G 2.2G  5000 Expensive
4 Brand4 Dell4  1G 2.8G  1000     Cheap
5 Brand5 Dell5  2G 2.8G  2000     Cheap
6 Brand6 Dell6  4G 2.8G  5000 Expensive
7 Brand7 Dell7  1G 3.3G  1000     Cheap
8 Brand8 Dell8  2G 3.3G  2000     Cheap
9 Brand9 Dell9  4G 3.3G  5000 Expensive

> PC$PD2=ifelse(PC$Price>3000,'Expensive','Cheap') #用ifelse函數(shù)來(lái)實(shí)現(xiàn)相同的功能更方便
> PC
   Brand PName Men  Feq Price        PD       PD2
1 Brand1 Dell1  1G 2.2G  1000     Cheap     Cheap
2 Brand2 Dell2  2G 2.2G  2000     Cheap     Cheap
3 Brand3 Dell3  4G 2.2G  5000 Expensive Expensive
4 Brand4 Dell4  1G 2.8G  1000     Cheap     Cheap
5 Brand5 Dell5  2G 2.8G  2000     Cheap     Cheap
6 Brand6 Dell6  4G 2.8G  5000 Expensive Expensive
7 Brand7 Dell7  1G 3.3G  1000     Cheap     Cheap
8 Brand8 Dell8  2G 3.3G  2000     Cheap     Cheap
9 Brand9 Dell9  4G 3.3G  5000 Expensive Expensive

> PC$Price #PC$Prince是一個(gè)向量ifelse能完成向量化計(jì)算,對(duì)每一個(gè)元素作比較返回相應(yīng)的值。
[1] 1000 2000 5000 1000 2000 5000 1000 2000 5000
循環(huán)結(jié)構(gòu)
for循環(huán)
從向量x中取出單個(gè)數(shù)據(jù)存到臨時(shí)變量n當(dāng)中,每取出一次,就執(zhí)行一次循環(huán)體。
for(n in x){

}
舉例
> for(x in 1:5){
+   print (x^2)
+ }
[1] 1
[1] 4
[1] 9
[1] 16
[1] 25
while循環(huán)
condition為真的時(shí)候執(zhí)行循環(huán)體
while(condition){
….
}
舉例
> i = 1
> while(i<6){
+   print (x^2)
+   i = i + 1
+ }
[1] 25
[1] 25
[1] 25
[1] 25
[1] 25
repeat循環(huán)
repeat是死循環(huán),只有用break來(lái)打斷
repeat{

break
}
舉例
> i = 1
> repeat{
+   print (i^2)
+   i = i + 1
+   if (i>5) break
+ }
[1] 1
[1] 4
[1] 9
[1] 16
[1] 25
break、next
break是終止整個(gè)循環(huán)
next是終止當(dāng)前的循環(huán),不執(zhí)行循環(huán)體中next后面的部分。
函數(shù)和包
1、函數(shù)
向量、因子、矩陣、數(shù)據(jù)框、數(shù)組、列表以及函數(shù)都是一類對(duì)象,可以隨時(shí)創(chuàng)建,可以作為函數(shù)的參數(shù)。也就是說(shuō),R語(yǔ)言中的函數(shù)因?yàn)槭且活悓?duì)象,所以可以在函數(shù)中再創(chuàng)造函數(shù),在C語(yǔ)言和C++等語(yǔ)言中函數(shù)就不是一類對(duì)象,必須提前編譯。
1)、創(chuàng)建
R語(yǔ)言中,沒(méi)有return語(yǔ)句的時(shí)候,會(huì)把整個(gè)函數(shù)的最后一句作為返回語(yǔ)句。
myfunction = function(par1,par2){
……
}
> myadd = function(a,b,c){
+   return (a+b+c)
+ }
> (a = myadd(1,2,3))
[1] 6
> mystat = function(x,na.omit=FALSE){
+   if (na.omit){
+     x=x[!is.na(x)] #是否忽略向量中的缺省值
+   }
+   m=mean(x)
+   n=length(x)
+   s=sd(x)
+   skew=sum((x-m)^3/s^3)/n
+   return (list(n=n,mean=m,stdev=s,skew=skew))
+ }
> x=rnorm(1000,100,10) #創(chuàng)建一個(gè)正太分布的隨機(jī)向量,有1000個(gè)數(shù),平均數(shù)是100,標(biāo)準(zhǔn)差是10
> mystat(x)
$n
[1] 1000

$mean
[1] 100.4087

$stdev
[1] 9.899276

$skew
[1] 0.03952049
2)、查看函數(shù)代碼
不帶括號(hào)的函數(shù)名
使用page函數(shù),打開(kāi)編輯器查看代碼。
> mystat  #通過(guò)不帶括號(hào)的函數(shù)名來(lái)調(diào)用
mystat = function(x,na.omit=FALSE){
  if (na.omit){
    x=x[!is.na(x)] #是否忽略向量中的缺省值
  }
  m=mean(x)                 #調(diào)用mean()函數(shù)計(jì)算均值
  n=length(x)               #調(diào)用length()函數(shù)計(jì)算長(zhǎng)度
  s=sd(x)                   #調(diào)用sa()函數(shù)計(jì)算標(biāo)準(zhǔn)差
  skew=sum((x-m)^3/s^3)/n   #計(jì)算偏度系數(shù) 偏度系數(shù)是描述分布偏離對(duì)稱性程度的一個(gè)特征數(shù)。當(dāng)分布左右對(duì)稱時(shí),偏度系數(shù)為0。當(dāng)偏度系數(shù)大于0時(shí),即重尾在右側(cè)時(shí),該分布為右偏。當(dāng)偏度系數(shù)小于0時(shí),即重尾在左側(cè)時(shí),該分布左偏。
  return (list(n=n,mean=m,stdev=s,skew=skew))
}
myadd = function(a,b,c){
  return (a+b+c)
}

>page(mystat) #使用page函數(shù),調(diào)用系統(tǒng)的編輯器查看代碼。

3)、導(dǎo)入.R文件
source('G:/TestFunction.r')
1
2、包的安裝和加載
1)、包的安裝
R語(yǔ)言中包的安裝會(huì)自動(dòng)解決依賴
使用R自帶的編輯器安裝包
第一步、程序包 ————> 設(shè)定CRAN鏡像
第二步、程序包 ————> 安裝程序包
使用命令安裝
install.packages(‘a(chǎn)bc’)
2)、包的加載
安裝包的時(shí)候需要用”將包的名稱包裹,加載包的時(shí)候不需要。
Rstudio中使用命令加載包
> library(abc)
載入需要的程輯包:abc.data
載入需要的程輯包:nnet
載入需要的程輯包:quantreg
載入需要的程輯包:SparseM

載入程輯包:‘SparseM’

The following object is masked from ‘package:base’:

    backsolve

載入需要的程輯包:MASS
載入需要的程輯包:locfit
locfit 1.5-9.1   2013-03-22
>
Rstudio中,使用右下角的面板來(lái)加載包。
直接勾選就好。
向量化計(jì)算
1、普通的加減乘除
所謂向量化運(yùn)算就是對(duì)向量中的每一個(gè)元素都進(jìn)行運(yùn)算處理
舉例
> (x=1:5)
[1] 1 2 3 4 5
> (x=x^2)
[1]  1  4  9 16 25
> (y=matrix(1:20,4,5))
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14   18
[3,]    3    7   11   15   19
[4,]    4    8   12   16   20
> (y=y^2)
     [,1] [,2] [,3] [,4] [,5]
[1,]    1   25   81  169  289
[2,]    4   36  100  196  324
[3,]    9   49  121  225  361
[4,]   16   64  144  256  400

> (y=11:15)
[1] 11 12 13 14 15
> (x+y) #相同長(zhǎng)度的向量可以直接+-*/
[1] 12 16 22 30 40
> y>=13
[1] FALSE FALSE  TRUE  TRUE  TRUE
向量化運(yùn)算支持哪些運(yùn)算:+-*/等四則運(yùn)算 >
2、apply家族
apply
sapply lapply
mapply tapply
1)、 apply(x,MARGIN=2,…)
apply(數(shù)組,維度,函數(shù)/函數(shù)名)
沿著數(shù)組的某一維度來(lái)處理數(shù)據(jù),利用設(shè)置MARGIN的值來(lái)改變數(shù)據(jù)。MARGIN=2表示在列(域)的層面上處理數(shù)據(jù)
舉例
> x=data.frame(pv=rnorm(100,20,3), #先生成一個(gè)有三個(gè)域的數(shù)據(jù)框
>            + uv=rnorm(100,40,4),
>            + ip=runif(100,40,50))
> apply(x,MARGIN = 2,mean)  #MARGIN=1表示在行(記錄)層面上處理數(shù)據(jù),MARGIN=2表示在列(域)的層面上處理數(shù)據(jù)。處理方式是,mean,求均值。
      pv       uv       ip
20.45526 39.81572 45.30480
#quantile是查看一組數(shù)據(jù)的百分位點(diǎn),probs=c(0.1,0.5,0.9)設(shè)置想查看的百分位點(diǎn)
> apply(x,MARGIN = 2,quantile,probs=c(0.1,0.5,0.9))  
          pv       uv       ip
10% 16.90155 35.17513 41.02527
50% 20.09723 39.38737 45.19671
90% 24.70416 44.82648 49.37066
#可以看到pv、uv、ip在0.1、0.5、0.9處的百分位點(diǎn)

#數(shù)據(jù)降維
> (x=array(rnorm(2*3*4),c(2,3,4))) #生成一個(gè)三維的列表
, , 1

            [,1]      [,2]       [,3]
[1,] -0.04255047 -1.407329 -0.9931210
[2,] -1.65621498  1.479997  0.5501781

, , 2

           [,1]      [,2]       [,3]
[1,] -0.4668323 0.7451938  0.9585998
[2,] -0.4205612 0.3414420 -1.1822220

, , 3

          [,1]     [,2]        [,3]
[1,]  0.596996 0.233922  0.03285836
[2,] -1.534795 1.598219 -1.89555578

, , 4

           [,1]       [,2]      [,3]
[1,]  0.6793028  0.4429203 -0.605179
[2,] -0.4042032 -0.6241099  1.257368

> apply(x,c(1,2),mean)  #將列表沿著3維的方向來(lái)處理數(shù)據(jù),求均值。
          [,1]       [,2]       [,3]
[1,]  0.191729 0.00367673 -0.1517105
[2,] -1.003944 0.69888709 -0.3175580
> apply(x,c(1,3),mean)  #將列表沿著2維的方向來(lái)處理數(shù)據(jù),求均值。
           [,1]       [,2]       [,3]       [,4]
[1,] -0.8143335  0.4123204  0.2879255 0.17234803
[2,]  0.1246534 -0.4204471 -0.6107106 0.07635149
> apply(x,c(2,3),mean)  #將列表沿著1維的方向來(lái)處理數(shù)據(jù),求均值。
            [,1]       [,2]       [,3]        [,4]
[1,] -0.84938273 -0.4436968 -0.4688996  0.13754980
[2,]  0.03633396  0.5433179  0.9160706 -0.09059479
[3,] -0.22147144 -0.1118111 -0.9313487  0.32609427
2)、 lapply(列表,函數(shù)名/函數(shù),其他參數(shù))
lapply總是返回一個(gè)列表
> (x=list(a=1:10,b=c(11,21,31,41,51))) #創(chuàng)建一個(gè)列表
$a
 [1]  1  2  3  4  5  6  7  8  9 10

$b
[1] 11 21 31 41 51

> lapply(x,mean)  #對(duì)列表的成分求均值,lappy返回值也是一個(gè)列表。
$a
[1] 5.5

$b
[1] 31

> (x=1:4)
[1] 1 2 3 4

> lapply(x,runif) #runif函數(shù)是從均勻分布的總體中抽取若干個(gè)數(shù)字。runif函數(shù)一次作用于x中的每一個(gè)元素。
[[1]]
[1] 0.1420802 #x=1的時(shí)候抽出0.1420802

[[2]]
[1] 0.5706941 0.5051777 #x等于2的時(shí)候,抽出兩個(gè)數(shù)

[[3]]
[1] 0.9835877 0.5630008 0.2712130 #x等于3的時(shí)候,抽出3個(gè)數(shù)

[[4]]
[1] 0.3299968 0.6336621 0.3345203 0.4135361 #x等于4的時(shí)候,抽出4個(gè)數(shù)

> lapply(x,runif,min=0,max=100)
[[1]]
[1] 0.9995915

[[2]]
[1] 17.17236 85.43321

[[3]]
[1] 95.25653 52.58847 48.70183

[[4]]
[1] 79.50202 96.41646 56.94763 38.45675

> lapply(x,runif,min=0,max=100)  #min=0,max=100是作用于runif函數(shù)的。從0-100中間選擇。
[[1]]
[1] 10.90927

[[2]]
[1] 13.579156  5.199927

[[3]]
[1] 74.93334 67.08987 91.84644

[[4]]
[1] 41.47904 90.65402 44.92566 79.38730

#在lapply中書(shū)寫(xiě)匿名函數(shù)獲取列表中每個(gè)矩陣的第一行。
> (x=list(a=matrix(1:6,2,3),b=matrix(4:7,2,2)))
$a
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

$b
     [,1] [,2]
[1,]    4    6
[2,]    5    7

> lapply(x,function(m) m[1,])
$a
[1] 1 3 5

$b
[1] 4 6

3)、 sapply(列表,函數(shù)名/函數(shù),其他參數(shù))
sapply和lapply的差不多,但是sapply可以自動(dòng)化簡(jiǎn)函數(shù),
當(dāng)結(jié)果列表長(zhǎng)度為一的時(shí)候,返回向量。
當(dāng)結(jié)果列表長(zhǎng)度相同且大于一的時(shí)候返回矩陣。
當(dāng)結(jié)果列表不等的時(shí)候仍然返回一個(gè)列表。
> (x=list(a=1:10,b=c(11,21,31,41,51)))
$a
 [1]  1  2  3  4  5  6  7  8  9 10

$b
[1] 11 21 31 41 51

> sapply(x,mean)  #返回結(jié)果變成了向量
   a    b
 5.5 31.0
> class(sapply(x,mean))
[1] "numeric"
4)、 mapply(列表,函數(shù)名/函數(shù),其他參數(shù))
mapply(函數(shù)/函數(shù)名,數(shù)據(jù),函數(shù)相關(guān)的參數(shù)) ,mapply是apply的多元版本。
> (u=list(rep(1,4),rep(2,3),rep(3,2),rep(4,1)))
[[1]]
[1] 1 1 1 1

[[2]]
[1] 2 2 2

[[3]]
[1] 3 3

[[4]]
[1] 4

> (o=mapply(rep,1:4,4:1)) #4:1對(duì)應(yīng)設(shè)置了前面的1:4重復(fù)次數(shù),和上面的結(jié)果是一樣的。
[[1]]
[1] 1 1 1 1

[[2]]
[1] 2 2 2

[[3]]
[1] 3 3

[[4]]
[1] 4

#自己寫(xiě)函數(shù),再由mapply來(lái)調(diào)用
> s=function(n,mean,std){
+   rnorm(n,mean,std) #從均值為mean,標(biāo)準(zhǔn)差為std的總體里抽取n個(gè)元素。
+ }
> s(4,1,2) #測(cè)試函數(shù)
[1]  2.1789096  0.3389229  3.3318089 -2.4226340

#在mapply中調(diào)用自己寫(xiě)的函數(shù),返回一個(gè)列表。
> mapply(s,1:5,5:1,2) #1:5表示一次抽取1,2,3,4,5個(gè)元素,5:1表示對(duì)應(yīng)前面五次每次的均值,2表示,這5次抽取的每個(gè)總體的標(biāo)準(zhǔn)差。
[[1]]
[1] 4.89449  #從均值為5標(biāo)準(zhǔn)差為2的整體中隨機(jī)抽取1個(gè)

[[2]]
[1] 2.465339 6.585427 #從均值為4標(biāo)準(zhǔn)差為2的整體中隨機(jī)抽取2個(gè)

[[3]]
[1] 3.054207 1.269529 5.044077 #從均值為3標(biāo)準(zhǔn)差為2的整體中隨機(jī)抽取3個(gè)

[[4]]
[1]  0.6101787  2.7211071  1.6095973 -0.4073418 #從均值為2標(biāo)準(zhǔn)差為2的整體中隨機(jī)抽取4個(gè)

[[5]]
[1]  1.6578902  0.9364415 -2.8377756  2.5111859 -1.1535675 #從均值為1標(biāo)準(zhǔn)差為2的整體中隨機(jī)抽取5個(gè)

list(s(1,5,2),s(2,4,2),s(3,3,2),s(4,2,2),s(5,1,2)) #效果和上面用mapply是一樣的。
[[1]]
[1] 4.380181

[[2]]
[1] -1.345394  4.906018

[[3]]
[1]  2.7507204 -0.8917604  3.4670050

[[4]]
[1] 2.589484 3.014790 6.153610 2.452525

[[5]]
[1]  2.2042391 -1.9790139 -1.6326908  0.9025792  2.4117260
5)、 tapply(向量,因子/因子列表,函數(shù)/函數(shù)名)
對(duì)向量的子集進(jìn)行操作
 > (x=c(rnorm(5),runif(5),rnorm(5,1)))
 [1] -1.1003527 -0.6135971  0.9259782 -0.6880730 -1.1620147  0.5222504  0.6076465  0.6647177
 [9]  0.3104704  0.5861854  1.7122914  1.0757132  2.1427658  2.6782741 -1.0646930
> (f=gl(3,5))
 [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
Levels: 1 2 3
> tapply(x,f,mean) #對(duì)x這個(gè)向量按照f(shuō)的水平因子進(jìn)行求均值的操作,1下面是x中前5個(gè)數(shù)的均值,2下面是x中間5個(gè)數(shù)的均值,3下面是x中后面5個(gè)數(shù)的均值。
>
         1          2          3
-0.5276119  0.5382541  1.3088703
> tapply(x,f,mean,simplify=FALSE) #tapply函數(shù)中simplify的默認(rèn)值是TRUE,完成了簡(jiǎn)化,否則返回的也是一個(gè)列表。
$`1`
[1] -0.5276119

$`2`
[1] 0.5382541

$`3`
[1] 1.30887
3、split
根據(jù)因子或者因子列表將向量或者其他對(duì)象進(jìn)行分組操作
通常與lappy一起使用
spilt(向量/列表/數(shù)據(jù)框,因子/因子列表)
一般split函數(shù)是和lapply/sapply函數(shù)配合使用的,lapply(split(x,f),mean),將x先按照f(shuō)分組,再使用mean函數(shù)求均值,最后以列表的形式輸出。
 > (x=c(rnorm(5),runif(5),rnorm(5,1)))
 [1] -1.1003527 -0.6135971  0.9259782 -0.6880730 -1.1620147  0.5222504  0.6076465  0.6647177
 [9]  0.3104704  0.5861854  1.7122914  1.0757132  2.1427658  2.6782741 -1.0646930

> f
 [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
Levels: 1 2 3

> split(x,f)  #將x根據(jù)f分成相應(yīng)的組
$`1`
[1] -1.1003527 -0.6135971  0.9259782 -0.6880730 -1.1620147 #$`1`水平1在x中對(duì)應(yīng)的五個(gè)值

$`2`
[1] 0.5222504 0.6076465 0.6647177 0.3104704 0.5861854 #$`2`水平2在x中對(duì)應(yīng)的五個(gè)值

$`3`
[1]  1.712291  1.075713  2.142766  2.678274 -1.064693 #$`3`水平3在x中對(duì)應(yīng)的五個(gè)值

#將x先按照f(shuō)分組,再使用mean函數(shù)求均值,最后以列表的形式輸出。
> lapply(split(x,f),mean)
$`1`
[1] -0.5276119

$`2`
[1] 0.5382541

$`3`
[1] 1.30887

# colMeans是計(jì)算列的平均值的函數(shù)
> lapply(s,function(x) colMeans(x[,c("Ozone","Wind","Temp")]))
$`5`
   Ozone     Wind     Temp
      NA 11.62258 65.54839

$`6`
   Ozone     Wind     Temp
      NA 10.26667 79.10000

$`7`
    Ozone      Wind      Temp
       NA  8.941935 83.903226

$`8`
    Ozone      Wind      Temp
       NA  8.793548 83.967742

$`9`
Ozone  Wind  Temp   
   NA 10.18 76.90
#所有Ozone的均值都是NA,說(shuō)明是有確實(shí)存在,所以導(dǎo)致計(jì)算列均值的時(shí)候也是缺失值。

> sapply(s,function(x) colMeans(x[,c("Ozone","Wind","Temp")],na.rm = TRUE))
             5        6         7         8        9
Ozone 23.61538 29.44444 59.115385 59.961538 31.44828
Wind  11.62258 10.26667  8.941935  8.793548 10.18000
Temp  65.54839 79.10000 83.903226 83.967742 76.90000
#設(shè)置sapply函數(shù)的na.rm屬性為TRUE是可以忽略缺失值的。

#當(dāng)然,比較6的做法是我們自己是我們自己手動(dòng)清洗數(shù)據(jù)
> g=complete.cases(airquality) #第一步,調(diào)用complete.cases()清洗數(shù)據(jù)
> s_tmp=split(airquality[g,],airquality$Month) #第二步,調(diào)用split方法來(lái)將已經(jīng)清洗過(guò)的數(shù)據(jù)根據(jù)月份來(lái)分組。
> sapply(s_tmp,function(x) colMeans(x[,c("Ozone","Wind","Temp")])) #調(diào)用sapply方法并且自己寫(xiě)一個(gè)匿名函數(shù)來(lái)求特定域的均值。
             5         6         7        8   9
Ozone 26.41935 53.666667 59.258065 21.42105 NaN
Wind  11.73871  8.803333  8.619355 10.95263 NaN
Temp  69.35484 83.066667 84.161290 72.84211 NaN
排序數(shù)據(jù)分析培訓(xùn)
sort:對(duì)向量進(jìn)行排序,返回排好序的內(nèi)容。
order:返回排序好的內(nèi)容的下標(biāo)/多個(gè)排序標(biāo)準(zhǔn)。
> (x=data.frame(v1=1:5,v2=c(10,7,9,6,8),v3=11:15,v4=c(1,1,2,2,1)))
  v1 v2 v3 v4
1  1 10 11  1
2  2  7 12  1
3  3  9 13  2
4  4  6 14  2
5  5  8 15  1
> (sort(x$v2)) #按升序排列
[1]  6  7  8  9 10
> (sort(x$v2,decreasing=TRUE)) #按降序排列
[1] 10  9  8  7  6
> order(x$v2) #order是返回下標(biāo)的,不返回內(nèi)容。
[1] 4 2 5 3 1
> x[order(x$v2),] #調(diào)用得到的下標(biāo)打印
  v1 v2 v3 v4
4  4  6 14  2
2  2  7 12  1
5  5  8 15  1
3  3  9 13  2
1  1 10 11  1
> x[order(x$v4,x$v2),]  #先按照v4進(jìn)行排序,v4中有相同的再按照v2進(jìn)行排序。
  v1 v2 v3 v4
2  2  7 12  1
5  5  8 15  1
1  1 10 11  1
4  4  6 14  2
3  3  9 13  2
> x[order(x$v4,x$v2,decreasing=TRUE),] #降序排列。
  v1 v2 v3 v4
3  3  9 13  2
4  4  6 14  2
1  1 10 11  1
5  5  8 15  1
2  2  7 12  1

數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見(jiàn):http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }