1. 程式人生 > >R語言基礎

R語言基礎

工作目錄配置

setwd("/Users/chaojinwu/Downloads/Old/R/R培訓課件/R培訓-第二期")  #可以用 / or \\
getwd()

資料結構

#R語法說明: <-  即是 =, 所有符合要英文狀態輸入
a<-2

##向量
#由數值、字元、邏輯值組成 
a<-c("TOM",12,T,F)
#如何訪問向量元素
a[1]
a[2,3] #報錯
a[c(2,3)]


#矩陣
#由數值、字元、邏輯值組成 
a<-matrix(1:20,nrow=5,ncol=4)
a[3,1]  #如何訪問向量元素

#資料框 mtcars
#由數值、字元、邏輯值組成 
a<-mtcars #如何訪問向量元素 a[3,1] a[4,] a[,2] a[,c(3,4)] a[1:4,1:4] # 列表 a=list(1,"字串",c(2,3,4),matrix(1:10,nrow=5)) a[[4]][3,]

資料讀取

#.xlsx

install.packages("rJava")
install.packages("openxlsx")
library(openxlsx)
setwd("/Users/chaojinwu/Downloads/Old/R/R培訓課件/R培訓-第一期")
data<-read.xlsx("資料.xlsx",2,encoding = "UTF-8"
) data<-read.xlsx("資料.xlsx","yunying",encoding = "UTF-8") #.csv datacsv<-read.csv("資料csv.csv") dataCSV # 資料庫 library(RODBC) library(RMySQL) myconn<-dbConnect(RMySQL::MySQL(),host="10.13.1.70",user="root",password="admin") rmysqlGbk<-dbSendQuery(myconn,"SET NAMES gbk") datasql<-dbGetQuery(myconn,"select * from news.dianping limit 2"
)

資料集


#資料讀取
data<-read.table(file.choose(),header=T,sep=",",encoding = 'UTF-8')
holiday_analysis_data<-read.csv("節假日分析.csv",header = T, sep = ",",stringsAsFactors=FALSE)
holiday_base_table<-read.csv("節假日.csv")

#資料集:holiday_analysis_data
#列:holiday_analysis_data$product_id, holiday_analysis_data[1], holiday_analysis_data[,1]
#行:holiday_analysis_data[2,]
#值:holiday_analysis_data[2,2]
#檢視屬性:str()
#基本統計資訊:summary()
#尋求幫助:?函式,?函式(), help(函式)
#預設前6行 head(holiday_analysis_data) 
#預設後6行 tail(holiday_analysis_data) 
#檢視屬性 str(holiday_analysis_data) 
#檢視描述 summary(holiday_analysis_data) 
#重新命名
names(holiday_analysis_data)
names(holiday_analysis_data)[1]<-"cash"
names(holiday_analysis_data)<-c("product_id","product_name","date","cash")

資料型別轉換

#資料型別:字串character,數值numeric,日期date,因子factor
#判斷:is.character() is.numeric() is.data.frame() is.factor() typeof()
#轉換:as.character() as.numeric() as.data.frame() as.factor() as.Date()

#factor
holiday_base_table<-read.csv("節假日.csv")
str(holiday_base_table)
sum(c(1,2,3,4))
typeof(c(1,2,3,4))
sum(as.factor(c(1,2,3,4)))

#日期值date:"2015-12-01"唯一結構
#輸入的date存在多種結構:2015/12/01,2015-12-01,20151201,
#                     12/01/2015,  12/01/15,  2015年12月1日
# %Y 2015; %y 15; %m 12, %d 01等,可參考實戰page73
as.Date("2015/12/01")
as.Date("2015-12-01")
as.Date("20151201","%Y%m%d")
as.Date("12/01/2015") #錯誤
as.Date("12/01/2015","%m/%d/%Y")
as.Date("12/01/15","%m/%d/%y")
as.Date("2015年12月1日","%Y年%m月%d日")
Sys.Date()


#character,numeric
str(holiday_analysis_data)
typeof(holiday_analysis_data$product_id)
holiday_analysis_data$product_id<-as.character(holiday_analysis_data$product_id)
holiday_analysis_data$date<-as.Date(holiday_analysis_data$date)
holiday_analysis_data$cash<-as.numeric(holiday_analysis_data$cash) #報錯啦~~

缺失值處理

#is.na() not availabel
y<-c(1,2,3,4,NA)
is.na(y)
y[is.na(y)]<-0

建立新變數 & 刪除變數

#1.計算 2.函式 3.條件賦值
#1
holiday_analysis_data$cash_fake<-holiday_analysis_data$cash*2 
#2
#install.packages("lubridate")
library(lubridate)
holiday_analysis_data$year<-year(holiday_analysis_data$date)  #year,month只能處理日期型
holiday_analysis_data$month<-month(holiday_analysis_data$date)
#3
holiday_analysis_data$level[holiday_analysis_data$cash<=1000]<-"低收入"
holiday_analysis_data$level[holiday_analysis_data$cash<=5000 & holiday_analysis_data$cash>1000]<-"中等收入"
holiday_analysis_data$level[holiday_analysis_data$cash>5000]<-"高收入"
#邏輯運算子:& | > >= < <= ==(判斷,而不是賦值) != <> 

排序

#order() sort() rank()
order(c(2,3,5,1,0)) #返回位置:min——max
sort(c(2,3,5,1,0))  #按從小到大排序
rank(c(2,3,5,1,0))  #返回名次

holiday_analysis_data_order<-holiday_analysis_data[order(-holiday_analysis_data$cash),]

資料合併

#列合併merge cbind  行合併rbind
head(holiday_base_table)
str(holiday_base_table)
holiday_base_table$date<-as.Date(holiday_base_table$date)
data_merge<-merge(holiday_analysis_data,holiday_base_table,by="date") #左匹配
str(data_merge)
str(holiday_analysis_data)

data_cbind<-cbind(holiday_analysis_data,holiday_base_table)  #報錯啦
data_cbind<-cbind(holiday_analysis_data[1:10,],holiday_base_table[1:10,])

rbind()
data1_rbind<-holiday_base_table[1:10,]
data2_rbind<-holiday_base_table[32:41,]
data1_rbind
data2_rbind
rbind(data1_rbind,data2_rbind)

資料篩選

#subset, which
town_2015_data<-subset(data_merge,product_name=="南潯古鎮" & year=="2015")
town_cash_data<-subset(data_merge,cash<100 | cash >10000)

town_data<-data_merge[which(data_merge$product_name=="南潯古鎮"),]
town_2015_data<-data_merge[which(data_merge$product_name=="南潯古鎮" & data_merge$year=="2015"),]

vlookup

holiday_base_table
holiday_analysis_data

match(holiday_analysis_data$date,holiday_base_table$date)
holiday_analysis_data$holiday<-holiday_base_table[match(holiday_analysis_data$date,holiday_base_table$date),2]
#結構:A$new_col<-B[match(A$key,B$key),B$col]

透視表

#aggregate(目標值, by=list(維度), FUN)

#計數 table  #求和、求平均 aggregate
str(holiday_analysis_data)
table(holiday_analysis_data$product_name)
table(holiday_analysis_data$product_name,holiday_analysis_data$level)
table(holiday_analysis_data$product_name,holiday_analysis_data$level,holiday_analysis_data$year)

aggregate(town_2015_data$cash,by=list(town_2015_data$holiday),FUN=mean)

函式

#1.數學函式 abs() sqrt() exp()  floor() ceiling() round() 三角函式  
abs(c(-9,-8,-7,-6,-5,4,3,2,1))  

sqrt(c(1,2,4,9,16,25))  

exp(c(1,2,3,4,5,6))  

floor(c(2,2.1,2.5,2.9,3,3.1)) #不大於x的最大整數  

ceiling(c(2,2.1,2.5,2.9,3,3.1)) #不小於x的最小整數  

round(2.3456789,2)  

sin(pi/2)  

#2.統計函式 sum() mean() median() sd() var() range() min() max() quantile()  
sum(c(1,2,3,4))  

mean(c(1,2,3,4))  

median(c(1,2,3,4,10))  

quantile(c(0,1,2,3,4,5,6,7,8,9),c(0.2,0.8))  

#3.字串函式  
#3.1 字元數統計 length() nchar()  
samp<-c("a","bc","def","ghij")  
length(samp) #向量元素的字元個數  

nchar(samp) #向量元素的個數  

#3.2 大小寫轉換  
tolower("abcd EFGH")  

toupper("abcd EFGH")  

#3.3 字串連線  
paste("2015","08","07",sep="-")  

paste("專案",1:6,sep="")  

#case: 多變數vlookup() 
case_paste1<-read.csv("case_paste1.csv",stringsAsFactors=FALSE)
case_paste2<-read.csv("case_paste2.csv",stringsAsFactors=FALSE)
case_paste1$rev<-case_paste2[match(paste(case_paste1$出遊月份,case_paste1$八大區),paste(case_paste2$出遊月份,case_paste2$八大區)),3]

#3.4 字串拆分  
text <- "Hello world Hello china"    
strsplit(text, " ")  

strsplit("2015-08-07", "-")

#3.5 字串查詢  
grep("a",c("java","python","tableau","javascript"))  

grep("l|y",c("java","python","tableau","javascript"))  

#case: cm 
case_grep<-read.csv("case_grep.csv",stringsAsFactors=FALSE)
pattern1 <- "(韓國)|(日本)|(濟州)|(泰國)|(清邁)|(澳大利亞)|(郵輪)|(簽證)|(出境)|(塞班)|(普吉)|(巴厘島)|(馬爾地夫)|(馬來西亞)|(澳洲)|(美國)|(美洲)|(長灘)|(大溪地)|(歐洲)|(英國)|(法國)|(德國)|(法意瑞)|(土耳其)|(迪拜)|(埃及)|(俄羅斯)|(義大利)|(澳門)|(臺灣)|(香港)|(新加坡)|(南京銀行)|(模里西斯)|(柬埔寨)|(越南)|(阿聯酋)|(斯里蘭卡)|(首爾)|(斐濟)|(曼谷)|(西班牙)|(葡萄牙)|(北歐)|(蘇梅)|(關島)|(希臘)|(宿霧)|(蘭卡威)|(瑞士)|(芬蘭)|(菲律賓)|(東京)|(紐西蘭)|(塞席爾)|(加拿大)|(悉尼)|(沖繩)|(沙巴)|(寮國)|(帛琉)|(夏威夷)|(南非)|(汶萊)|(尼泊爾)|(新馬泰)|(芽莊)|(吳哥)|(伊朗)|(印度)|(清萊)|(澳新)|(德法)|(波蘭)|(坦尚尼亞)|(肯亞)|(郵輪)"
case_grep[grep(pattern1,case_grep[,1]),"BU"] <- "出境遊"
pattern2<- "(海南)|(三亞)|(海口)|(蜈支洲)|(鹿回頭)|(亞龍灣)|(跟團)|(包團)|(發團)|(當地)|(長途)|(當地遊)|(雙飛)"
case_grep[grep(pattern2,case_grep[,1]),"BU"] <- "國內遊"

grepl("a",c("java","python","tableau","javascript"))  

#3.6 字串替換  
#sub(查詢,替換,data)  
sub("a","bc",c("java","python","tableau","javascript")) #僅替換首個  

gsub("a","bc",c("java","python","tableau","javascript")) #替換全部  

#3.7 字串提取  
#strtrim(data,n)  substr(data,start,stop)  
data<-c("2016-08-01","2016-08-02","2016-08-03","2016-08-04")  
strtrim(data,4)  #excel:left()  

substr(data,6,10) #excel:mid()  

#3.8 字串匹配  
#match 返回第一次匹配的元素位置  
match(c("a","b","c","d"),c("b","d","c","a"))  

#4 函式用於資料框  apply族函式 
#apply(data,1 or 2 ,function) 1:row 2:column  
data<-matrix(1:9,nrow=3)  
apply(data,1,mean)   #行
apply(data,2,mean)   #列

#sapply lapply 區別:sapply輸出向量,lapply輸出列表  
sapply(data[1,], function(x) x^2)  

sapply(data, function(x) x^2)  

lapply(data,function(x) x^2)  

控制流

#1.條件   
#ifelse(條件判斷,真返回值,假返回值)  
x<-c(59,300,203,50)  
ifelse(x>=100,"大","小")  

if (x>=100) print("大") else print("小") #報錯  

#語法:if(){} elseif(){} else{} 

m=500  
if (m>=300){  
  print("非常大")  
}else if(m>=100){  
  print("大")  
}else{  
  print("小")    
}  


#2.迴圈  
#for   
for (i in 1:10){  
  print(paste(i,"次",sep="-"))  
}  

for (i in 1:4){  
  if (x[i]>=100) print("大") else print("小")  
}  

#while
i=1  
while (i<8){  
  print(paste("星期",i,sep="-"))  
  i<-i+1  
}  

資料重構

#1.轉置 t()
case_t<-read.csv("case_轉置.csv",stringsAsFactors=FALSE)
case_t
t(case_t)

#2.整合 melt()  
#melt(data,id=c(固定列))
library(reshape)
case_melt<-read.csv("case_整合.csv",stringsAsFactors=FALSE)
melt(case_melt,id=c("出遊月份"))

#3.展開 cast()  
#cast(data,固定列~展開列)
case_cast<-read.csv("case_展開.csv",stringsAsFactors=FALSE)
cast(case_cast,出遊月份~八大區)

這裡寫圖片描述

自編函式


#語法:myfunction<-function(引數1,引數2,……){ 描述;return()}
myfunction<-function(x,fun){ 
  if(fun=="sum"){
    return(sum(x))
  }else if(fun=="mean"){
    return(mean(x))
  }else if(fun=="median"){
    return(median(x))
  }else{
    return("error")
  }
  }

myfunction(c(1,2,3,4,10),"sum")
myfunction(c(1,2,3,4,10),"mean")
myfunction(c(1,2,3,4,10),"median")
myfunction(c(1,2,3,4,10),"round")


diff_weekday<-function(x,y){
  if(x==y){
    return(1)
  }else{
    a<-seq(as.Date(x),as.Date(y),"day")
    b<-c("星期六","星期日")
    length(a[sapply(a,function(x) all(weekdays(x)!=b))])
  }
}
diff_weekday("2016-08-01","2016-08-01")

diff_weekday("2016-08-01","2016-08-08")


sapply(a,function(x) all(weekdays(x)!=b))


?weekdays
b<-c("星期一","星期日")
all(weekdays(as.Date(a))!=b)

相關推薦

R語言基礎-數組和列表

ray post size com lis tom 維數 三維數組 數據類型 數組(array) 一維數據是向量,二維數據是矩陣,數組是向量和矩陣的直接推廣,是由三維或三維以上的數據構成的. 數組函數是array(),語法是:array(dadta, dim),當

R語言 基礎

pack 基礎 運行 () rar www 獲取 package 文檔 第一章 R語言介紹   1.R語言獲取和安裝     https://www.r-project.org/   2.R的使用     help.start() #打開幫助文檔     help(car)

R語言基礎語法

-s 產生 等於 開始 元素 去掉 一個 語言 false 學習一門新的語言,率先學習輸出hello world.我們就從這裏開始學習. 首先打開RStudio這個IDE,然後在左邊輸入: 1 > mystr <- "hello world"

2-3 R語言基礎 矩陣和數組

not 方法 ttr error bind names cbi 向量 bin #矩陣Matrix 三個參數:內容(可省),行數,列數 > x <- matrix(1:6,nrow = 3,ncol = 2) #第一個是內容,第二個,第三個是行列> x[1

2-2 R語言基礎 向量

#Vector 向量的三種建立方法,兩個引數:型別,長度 > x <- vector("character",length=10)> x1 <- 1:4> x2 <- c(1,2,3,4)> x3 <- c(TRUE,10,"a") #如果給向量賦值時元素型別

2-7 R語言基礎 資料框

#資料框   > df <- data.frame(id=c(1,2,3,4),name=c("a","b","c","d"),gender=c(TRUE,TRUE,FALSE,FALSE))> nrow(df) #4行[1] 4 > ncol(df) #3列[1] 3

2-6 R語言基礎 缺失值

#缺失值 Missing Value > #NaN不可識別NA> x <- c(1,NA,2,NA,3) > is.na(x)[1] FALSE TRUE FALSE TRUE FALSE > is.nan(x)[1] FALSE FALSE FALSE FALSE FAL

2-5 R語言基礎 factor

#因子:分類資料#有序和無序#整數向量+標籤label#Male/Female#常用於lm(),glm() > x <- factor(c("female","female","female","male"))> y <- factor(c("female","female","fe

2-7 R語言基礎 數據框

score col true data gen matrix frame [1] 基礎 #數據框 > df <- data.frame(id=c(1,2,3,4),name=c("a","b","c","d"),gender=c(TRUE,TRUE,FALS

R語言基礎 chapter 1

num x1 x2 x3 1 10378001 83 80 70 2 10378002 85 88 75 3 10378003 90 76 100 4 10378004 94 81 100 5 10378005 89 88 100 6 10378006 89

R語言基礎包中的繪圖函式——快速用R探索資料

library(ggplot2) #R語言中的基礎包所帶的繪圖函式雖然用起來相對ggplot2包不是那麼友好 #但在剛拿到原始資料時進行快速探索還是很方便的 ####散點圖 #運用plot()函式,向函式傳入一個x向量和一個y向量 plot(mtcars$wt,mtcars$mpg) #等價於

第一章,R語言-基礎知識

簡介 R語言主要用於資料視覺化與統計分析,當然現在也可以通過擴充套件包實現資料探勘等演算法。與Python相比,R語言相當於天生就載入了NumPy,SciPy,Pandas的大多數功能。現在來介紹一些R語言的基本知識。 正文 一,入門操作 1, 包 (1)下載包

R語言--基礎(三)

1. 字串 連線字串 - paste()函式 對於貼上功能的基本語法是 - paste(..., sep = " ", collapse = NULL) 以下是所使用的引數的說明 - -- ...表示要組合的任意數量的自變數。 -- sep表示引數之間的

R語言--基礎(二)

1. 決策 概述 決策結構要求程式設計師指定要由程式評估或測試的一個或多個條件,以及如果條件被確定為真則要執行的一個或多個語句,如果條件為假則執行其他語句。 Sr.No. 宣告和描述

R語言--基礎(一)

1. 概述 R語言是用於統計分析,圖形表示和報告的程式語言和軟體環境。 R語言由Ross Ihaka和Robert Gentleman在紐西蘭奧克蘭大學建立,目前由R語言開發核心團隊開發。 R語言在GNU通用公共許可證下免費提供,併為各種作業系統(如Linux,Windows和Ma

R語言基礎

工作目錄配置 setwd("/Users/chaojinwu/Downloads/Old/R/R培訓課件/R培訓-第二期") #可以用 / or \\ getwd() 資料結構 #R語法說明: <- 即是 =, 所有符合要英文狀態輸入

機器學習筆記之R語言基礎5(T,F檢驗)

T檢驗 t檢驗分為單總體檢驗和雙總體檢驗。 單總體檢驗:【樣本平均數,總體平均數差異】 -檢驗一個樣本平均數與一個已知的總體平均數的差異是否顯著。 –當總體分佈是正態分佈,如總體標準差未知且樣本容量小於30,那麼樣本平均數與總體平均數的離差統計量呈t

R語言-基礎操作(批量資料讀取和輸出)

使用R語言時一個常遇到的問題,就是檔案的批量讀取和對結果的批量輸出。 批量讀取 批量讀取資料,有兩種形式,讀取一個目錄下的所有檔案,從資料庫中讀取多個表。 ##讀取同一目錄下的所有檔案 pat

91、R語言編程基礎

nts log bank user spa ont 對象 bin 排列 1、查看當前工作空間 > getwd() [1] "C:/Users/P0079482.HHDOMAIN/Documents" > 2、查看內存中有哪些對象 > ls() [

R語言︱情感分析—詞典型代碼實踐(最基礎)(一)

text cto 關於 ora 訓練集 其他 查找 rap boa R語言︱情感分析—基於監督算法R語言實現筆記。 可以與博客 R語言︱詞典型情感分析文本操作技巧匯總(打標簽、詞典與數據匹配等)對著看。 詞典型情感分析大致有以下幾個步驟: 訓練數據集、neg/pos情感