R 語言-基礎

来源:http://www.cnblogs.com/one--way/archive/2016/09/12/5866909.html
-Advertisement-
Play Games

R語言 1997年成為GNU項目 開源免費 R官方網址 www.r-project.org R是數據分析領域的語言小巧靈活,通過擴展包來增強功能繪圖功能代碼簡單 開發環境R + RStudio 1、數據類型character 字元numeric 數值型,實數或小數integer 整型complex ...


R語言 1997年成為GNU項目 開源免費

R官方網址 www.r-project.org


R是數據分析領域的語言
小巧靈活,通過擴展包來增強功能
繪圖功能
代碼簡單

開發環境
R + RStudio

 

1、數據類型
character 字元
numeric 數值型,實數或小數
integer 整型
complex 複數型
logical 邏輯型 類似於boollean

2、數據結構
Vector 向量
Factor 因數
Array 數組
Matrix 矩陣
Data Frame 數據框
List 列表


一維:向量、因數 向量屬於數值型變數,因數對應於分類變數
二維:矩陣、數據框 矩陣中元素的數據類型是一致的,數據框由向量組成,每個向量中的數據類型保持一致,向量間的數據類型可以不一致,類似於表結構。
三維:數組、列表 數組用的比較少,多維數據結構;列表可以包含上面所有的數據結構

3、向量
向量表示一組數據,數據類型一致,向量可以表示行或者列
c() 如:
: 如: 1:10
seq(from(開始), to(到), by(步長), length.out(指定向量的元素個數), along.with(長度與指定的向量長度相同))

提取子集:
數字下標(正數:獲取指定元素,從1開始,負數:排除的意思)
which()函數(按條件來進行篩選)

#向量
(x1<- c(10,11,12,13))
(x2<- 1:10)
x3<- seq(1,5,1) #from 1 to 5 by 1
x4<- seq(5,by=2,length.out=8) #向量中元素個數為8
x5<- seq(2,by=3, along.with = x4) # along.with向量個數與x4一致
x5[1:5]
x5[c(1,2,3,4,5)]
x5[-1:-5]   #不要下標為1-5的元素

which(x5>5) #大於5的向量下標
x5[which(x5>10)] #大於5的向量值

 

4、因數
因數用於分類變數,有類別
factor()
gl()

#因數
f<-c('a','a','b','o','ab','ab')
f<-factor(c('a','a','b','o','ab','ab')) #創建因數,level預設按字母排序

unclass(f) #查看因數

f<-factor(c('a','a','b','o','ab','ab'),levels = c('a','b','o','ab')) #指定因數對應的level

unclass(f) #

f1<- gl(4,3,labels = c('blue','red','green','yellow')) #4個級別,每個級別重覆3次,labels的內容
f1

unclass(f1)

 

5、矩陣
行和列

生成矩陣
matrix()
由向量派生
由向量組合生成

操作
訪問元素
行列命名

矩陣運算
矩陣加法
1.矩陣+n 各個元素加n
2.矩陣+矩陣 對應元素相加

矩陣乘法
1.矩陣*n 各個元素乘n
2.矩陣*矩陣 行列相乘(矩陣1 m行*n列 矩陣2 p*q 要求n==p 結果矩陣為 m*q)
3.矩陣元素*矩陣元素 對應元素相乘

單位矩陣
元素都為1 n*n方陣

對角矩陣
對角元素為1 其餘的為0 n*n方陣

矩陣轉置
n*m m*n

#矩陣

#創建矩陣:
#方法一:使用matric(nrow=?,ncol=?)
x<-matrix(nrow=2,ncol=3) #nrow 指定行, ncol指定列
x
x<-matrix(1:18,nrow = 3,ncol = 6) # 3行,6列,元素值由1:18填充,預設一列一列順序填充
x
x<-matrix(1:18,nrow = 3, ncol = 6, byrow = T) # 3行,6列,元素值由1:18填充,指定行順序填充
x

#方法二: dim(a) 通過dim 傳遞向量
a<-1:18
dim(a)<-c(3,6) #3行6列,行順序填充
x

#方法三: rbind或cbind進行拼接
x<-1:10
y<-11:20
z<-21:30

m1 = rbind(x,y,z) #以行為單位進行拼接
m2 = cbind(x,y,z) #以列為單位進行拼接
m1
m2

#獲取矩陣元素
x<-matrix(1:18,nrow = 3,ncol = 6,byrow = T)
x

x[1,2] #第1行第2列
x[1,] #第1行
x[,2] #第2列
x[,c(2,3,4)] #第2 3 4列
x[c(1,2),] #第1 2行
x[c(1,2),2:4] #第1 2行 第2 3 4列


#行列命名
colnames(x)<-c('C1','C2','C3','C4','C5','C6') #列的名字
rownames(x)<-c('R1','R2','R3')  #行的名字

x['R1','C1']
x[c('R1','R2'),c('C1','C2')]


#矩陣運算

m1<-matrix(1:18,nrow = 3,ncol = 6, byrow = T)
m2<-matrix(19:36,nrow = 3, ncol = 6, byrow = T)
m1
m2

#矩陣加法
m1+10   #矩陣+n
m1+m2   #矩陣+矩陣

#矩陣乘法
m1*10  #矩陣*n
m1*m2  #矩陣對應元素相乘
m1 %*% t(m2)  #矩陣*矩陣 矩陣乘法 行列相乘

#對角矩陣
diag(4)  #4*4矩陣 對角元素都為1
diag(c(1,2,3,6))  #4*4矩陣,對角元素為1,2,3,6

x<-matrix(1:16,4,4)
diag(x) #顯示矩陣x的對角元素值


#解方程組
m<-diag(4)
m
b<-1:4
solve(m,b) #m %*% x=b 求x

 

6、數據框
記錄與域

#數據框

#創建數據框 
a<-data.frame(fx = rnorm(10,10,2),
              fy = runif(10,10,20),
              fmonth = 1:10 ) 

a[1,1]
a[1,]
a[,2]

a$fx  #通過$fx取列信息
a[[1]]#通過[[]]獲取列信息



search()  #查詢

attach(a)  #attach 數據到 search路徑
fx         #直接使用
detach(a)  #detach 數據

search()  #查詢


a<-with(a, fx)                #訪問數據框成員


#新增修改列
a<-within(a,{fx=1:10          #通過within來進行修改,和新增列
             fz=11:20})

#新增列
a$fz = 11:20
a$fz = a$fx+a$fy

#列存在則修改
a$fx = 1:10

#查詢數據集
b = subset(a,fx>1&fmonth==8,select=c(fx,fmonth))  #select 列過濾,fx>1&fmonth==8 行過濾


b=edit(a)  #修改後的數據集賦值給另一個數據集
b
fix(a)     #直接修改數據集內容
a

 

7、列表
成分


創建列表
list()

操作
列表成分
[[]]
$

#列表

#創建列表
a<-list(x=1:10,y=matrix(1:16,4,4),z=data.frame())

names(a) <- c('c1','c2','c3') #修改成分名稱

c
c=a['y']  #在列表中通過[]取出的對象類型還是列表
c[2,1]    
class(c)  #查看類型為list

c=a[['y']] #在列表中通過[[]]取出的對象類型為實際對象類型矩陣
c[2,1]
class(c)  #查看類型為matrix

a$y[2,1]  #獲取矩陣的元素

 

8、數組
array

#數組
(a=array(1:60,c(3,4,5)))  #數組三維
a[1,2,3]


9、數據類型轉換

檢查數據類型 is.開頭
is.character
轉換數據類型 as.開頭
as.character

x=c(1:2,'hello',T)
x
mode(x)      #查看數據類型
class(x)     #查看數據結構

is.vector(x)

y<-matrix(1:20,c(4,5))
mode(y)      #數據類型是numeric
class(y)     #數據結構是matrix

y<-as.data.frame(y) #數據類型轉換matrix->dataframe
y

 

10、分之結構
if...else...結構
if(condition){...}
else{...}

ifelse函數

#分支結構
(Brand<-paste(c('Brand'),1:9,sep='')) #粘合一起
                                     #"Brand1" "Brand2" "Brand3" "Brand4" "Brand5" "Brand6" "Brand7" "Brand8" "Brand9"
(PName<-paste(c('Dell'),1:9,sep=' '))
(Mem<-rep(c('1G','2G','4G'),times=3)) #重覆
                                      #"1G" "2G" "4G" "1G" "2G" "4G" "1G" "2G" "4G"
(Feq=rep(c('2.2G','2.8G','3.3G'),each=3))
(Price=rep(c(1000,2000,5000),3))
PC=data.frame(Brand,PName,Mem,Feq,Price)
##分支結構
#if..else
PC
PC$PD=rep('Cheap',9)

for (i in 1:nrow(PC)){     #1:nrow(PC)從第1行到最後一行
  if (PC[i,'Price']>3000){ #取值進行比較
    PC[i,'PD']='Expensive' #修改值
  }
}

PC

#ifelse函數
PC$PD2=ifelse(PC$Price>3000,'Expensive','Cheap')  #向量化運算

PC

c


11、迴圈結構
for(n in x){...}

while(condition){...}

repeat{...break}

break next

#迴圈結構
for (x in 1:5){
  print (x^2)
}

i=1
while (i<6){
  print (i^2)
  i=i+1
}

i=1
repeat {
  print (i^2)
  i=i+1
  if (i>5) break
}

 

12、函數
自定義函數

myfunc =function(par1,par2,...){
...
}

引用函數文件
source('D:/basic.R', encoding = 'UTF-8')

查看源碼
myfunc #終端顯示
page(myfunc) #用第三方編輯器查看

#函數
myadd=function(a,b,c){
  return (a+b+c)
}



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))
}

 

13、向量化運算和apply家族

#向量化
x=1:5

(y=x^2)

(y=matrix(1:16,4,4))
(z=y^2)

(x=1:5)
(y=11:15)
(x+y)

y>=13

ifelse(x%%2==0,'A','B')

x=data.frame(pv=rnorm(100,20,3),
             uv=rnorm(100,40,4),
             ip=runif(100,40,50))

apply(x,MARGIN = 2,mean)
apply(x,MARGIN = 2,quantile,probs=c(0.1,0.5,0.9))

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這種情況一般是由於系統防火牆設置問題導致的,這次遇到的系統是centos 7.2,防火牆由iptables改成了firewall,因此停止防火牆的命令應該是: 禁止防火牆啟動的命令應該是: 暫時只寫這麼多,關於防火牆的配置等以後有時間了再說. ...
  • 繼續解決mplayer安裝不上的問題: 多次嘗試後,把源換回官方然後 update&upgrade後安裝 問題解決 時區問題解決: 裡面的第五項 Internationalisation Options --> Change Timezone --> Asia --> Chongqing(找了半天沒 ...
  • 之前裝的是live版 就是沒有桌面的版本,想看能hdmi看電影,於是找了教程安裝omxplayer 用 命令 通過hdmi播放電影 具體安裝過程發在貼吧里了:http://tieba.baidu.com/p/4766986525?see_lz=1 但是依然不能掛字幕.... 無奈今天重裝rasbia ...
  • 近期項目查詢資料庫太慢,持久層也沒有開啟二級緩存,現希望採用Redis作為緩存。為了不改寫原來代碼,在此採用AOP+Redis實現。 目前由於項目需要,只需要做查詢部分: 數據查詢時每次都需要從資料庫查詢數據,資料庫壓力很大,查詢速度慢,因此設置緩存層,查詢數據時先從redis中查詢,如果查詢不到, ...
  • 在前面的幾篇關於Free編程的討論示範中我們均使用了基礎類型的運算結果。但在實際應用中因為需要考慮運算中出現異常的情況,常常會需要到更高階複雜的運算結果類型如Option、Xor等。因為Monad無法實現組合(monad do not compose),我們如何在for-comprehension中 ...
  • ...
  • 一、必備插件 1.babel:es6的語法支持 2.karma:測試框架 3.jasmine:斷言框架 4.webpack:打包工具 5.karma-webpack:karma調用webpack打包介面的插件 二、實現步驟 1.通過npm安裝上述必備的插件包 2.創建webpack.test.con ...
  • 誰沒掉進過幾個大坑 記得好久之前,總能時不時在某個地方看到一些標語,往往都是上面一個偉人的頭像,然後不管是不是他說的話,下麵總是有看起來很政治正確且沒卵用的屁話,我活到目前為止,最令我笑的肚子痛得是下麵這段標語。 態度決定高度,思路決定出路,細節決定成敗,環境決定心境,格局決定結局。 沒錯,這是一個 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...