欧美深夜视频_国产精品99视频_国产精品网站一区_亚洲最大av网

[R語言] R語言快速入門教程

2024-8-21 20:35| 發布者: 百年江湖| 查看: 435| 評論: 0

本文主要是為了從零開始學習和理解R語言,簡要介紹了該語言的最重要部分,以快速入門。主要參考文章:
?R-Tutorial??
R語言程序的編寫需要安裝R或RStudio,通常是在RStudio中鍵入代碼。但是RStudio個人感覺并不好用,因此本人編寫的R語言程序都是在Jupyter Notebook平臺使用。具體可以見在 Jupyter Notebook 中使用R語言。R語言和Python,matlab一樣都是解釋型語言,語法差別不大,容易入門。其他進階內容見R語言個人筆記
文章目錄


  • 1 入門基礎


  • 1.1 基礎使用
  • 1.2 軟件包的安裝


  • 2 復雜變量


  • 2.1 向量基礎
  • 2.2 操縱向量
  • 2.3 數據框dataframe


  • 3 高級函數


  • 3.1 paste函數
  • 3.2 處理日期
  • 3.3 制作列連表
  • 3.4 列表
  • 3.5 If-Else語句
  • 3.6 for循環
  • 3.7 apply類別函數
  • 3.8 使用tryCatch()處理錯誤


  • 4 參考
1 入門基礎

1.1 基礎使用

運算符
R語言程序都可以當成計算器使用,#在R語言中是注釋符,R忽略#之后的一切。
2 + 3 # 加法 52 * 3 # 乘法 6sqrt(36) # 開根號 6log10(100) # 10為底的對數運算 210 / 3 # 除法 3.3333333333333310 %/% 3 # 整除 310 %% 3 # 求余 15
6
6
2
3.33333333333333
3
1
賦值運算符
與大多數其他語言不同,R除了使用通常的=運算符賦值外,還使用<-或者->運算符。在R語言中<-或者->運算符就相當于=號,唯一的區別是<-和->指明了運算方向。==表示是否相等,=表示賦值。
a <- 10  # 把10賦值給aa = 10  # 把10賦值給a10 -> a  # 把10賦值給a# 10 = a  # 出錯數據類型
R語言沒有專門的步驟來定義變量的類型。R會在后臺直觀地進行判斷變量的類型。我們可以通過class函數來查看變量的數據類型
class(a) # numeric類型class(1.1) # numeric類型‘numeric’
‘numeric’
根據分配給變量a的值,R決定將a分配為numeric類型。如果您選擇將其更改為字符’10’而不是數字10,則可以執行以下操作:
a <- as.character(a) # 轉換a為字符串print(a)  # 打印a "10"class(a)  # 數據類型 "character"[1] "10"‘character’
當然我們也可以將a從字符串變為數字
a <- as.numeric(a)print(a)  # 打印a 10class(a)  # 數據類型 "numeric"[1] 10‘numeric’
常用的R語言類如下
變量

  • character 字符串
  • integer 整數
  • numeric 整數+分數
  • factor 分類變量,其中每個級別都是一個類別
  • logical 布爾
  • complex 復數
數據類別

  • vector 同類元素的集合
  • matrix 矩陣
  • data.frame 類似excel中的二維表
  • list 列表
我們可以通過as.類型名來改變變量類型
a<-as.matrix(a)print(a)class(a)[,1][1,]   10‘matrix’
a<-as.logical(a)print(a)class(a)[1] TRUE‘logical’
1.2 軟件包的安裝

首次安裝時,R附帶有一組內置軟件包,可以直接從R控制臺調用它們。但是,由于R是一種開放源代碼語言,因此任何人都可以通過編寫軟件包來為其功能做出貢獻。多年來,這些貢獻已導致超過5K軟件包的清單不斷增加。這是從R控制臺中安裝軟件包的方法。注意不要在jupyter notebook中使用該代碼,因為要選擇cran鏡像,很容易崩潰的。
#install.packages("car")  # install car package現在已經安裝了該軟件包,您需要對其進行初始化,然后才能調用已安裝的軟件包隨附的函數和數據集。
library(car)  # 初始化包require(car)  # 另一種初始化方法#library()  # 查看已經安裝好的包#library(help=car)  # 查看car包的幫助信息Warning message:"package 'car' was built under R version 3.6.1"Loading required package: carDataWarning message:"package 'carData' was built under R version 3.6.1"對于R語言可以直接輸入代碼查詢包和函數的介紹信息
#help(merge)  # 查看merge的幫助信息#?merge  # 從安裝包中查找merge信息,和help類似#??merge  # 模糊搜索example(merge)  # 展示示例代碼merge> authors <- data.frame(merge+     ## I(*) : use character columns of names to get sensible sort ordermerge+     surname = I(c("Tukey", "Venables", "Tierney", "Ripley", "McNeil")),merge+     nationality = c("US", "Australia", "US", "UK", "Australia"),merge+     deceased = c("yes", rep("no", 4)))merge> authorN <- within(authors, { name <- surname; rm(surname) })merge> books <- data.frame(merge+     name = I(c("Tukey", "Venables", "Tierney",merge+              "Ripley", "Ripley", "McNeil", "R Core")),merge+     title = c("Exploratory Data Analysis",merge+               "Modern Applied Statistics ...",merge+               "LISP-STAT",merge+               "Spatial Statistics", "Stochastic Simulation",merge+               "Interactive Data Analysis",merge+               "An Introduction to R"),merge+     other.author = c(NA, "Ripley", NA, NA, NA, NA,merge+                      "Venables & Smith"))merge> (m0 <- merge(authorN, books))      name nationality deceased                         title other.author1   McNeil   Australia       no     Interactive Data Analysis         <NA>2   Ripley          UK       no            Spatial Statistics         <NA>3   Ripley          UK       no         Stochastic Simulation         <NA>4  Tierney          US       no                     LISP-STAT         <NA>5    Tukey          US      yes     Exploratory Data Analysis         <NA>6 Venables   Australia       no Modern Applied Statistics ...       Ripleymerge> (m1 <- merge(authors, books, by.x = "surname", by.y = "name"))   surname nationality deceased                         title other.author1   McNeil   Australia       no     Interactive Data Analysis         <NA>2   Ripley          UK       no            Spatial Statistics         <NA>3   Ripley          UK       no         Stochastic Simulation         <NA>4  Tierney          US       no                     LISP-STAT         <NA>5    Tukey          US      yes     Exploratory Data Analysis         <NA>6 Venables   Australia       no Modern Applied Statistics ...       Ripleymerge>  m2 <- merge(books, authors, by.x = "name", by.y = "surname")merge> stopifnot(exprs = {merge+    identical(m0, m2[, names(m0)])merge+    as.character(m1[, 1]) == as.character(m2[, 1])merge+    all.equal(m1[, -1], m2[, -1][ names(m1)[-1] ])merge+    identical(dim(merge(m1, m2, by = NULL)),merge+              c(nrow(m1)*nrow(m2), ncol(m1)+ncol(m2)))merge+ })merge> ## "R core" is missing from authors and appears only here :merge> merge(authors, books, by.x = "surname", by.y = "name", all = TRUE)   surname nationality deceased                         title     other.author1   McNeil   Australia       no     Interactive Data Analysis             <NA>2   R Core        <NA>     <NA>          An Introduction to R Venables & Smith3   Ripley          UK       no            Spatial Statistics             <NA>4   Ripley          UK       no         Stochastic Simulation             <NA>5  Tierney          US       no                     LISP-STAT             <NA>6    Tukey          US      yes     Exploratory Data Analysis             <NA>7 Venables   Australia       no Modern Applied Statistics ...           Ripleymerge> ## example of using 'incomparables'merge> x <- data.frame(k1 = c(NA,NA,3,4,5), k2 = c(1,NA,NA,4,5), data = 1:5)merge> y <- data.frame(k1 = c(NA,2,NA,4,5), k2 = c(NA,NA,3,4,5), data = 1:5)merge> merge(x, y, by = c("k1","k2")) # NA's match  k1 k2 data.x data.y1  4  4      4      42  5  5      5      53 NA NA      2      1merge> merge(x, y, by = "k1") # NA's match, so 6 rows  k1 k2.x data.x k2.y data.y1  4    4      4    4      42  5    5      5    5      53 NA    1      1   NA      14 NA    1      1    3      35 NA   NA      2   NA      16 NA   NA      2    3      3merge> merge(x, y, by = "k2", incomparables = NA) # 2 rows  k2 k1.x data.x k1.y data.y1  4    4      4    4      42  5    5      5    5      5設置工作目錄
工作目錄是R可以直接訪問以讀取文件的參考目錄。您可以在不使用完整文件路徑的情況下直接將文件讀取和寫入文件到工作目錄。目錄名稱應使用正斜杠/或反斜杠分隔\,對于Windows也應如此。
# getwd()  # 獲得當前工作目錄# setwd(dirname)  # 設置工作目錄如何導入和導出數據
將數據引入R的最常見,最方便的方法是通過.csv文件。有一些軟件包可以從excel文件(.xlsx)和數據庫中導入數據,但此處不介紹。
a <- 1:3b <- (1:3)/5c <- c("row1", "row2", "row3")# 建立dataframedata <- data.frame(a, b, c)dataA data.frame: 3 × 3
a
b
c
<int>
<dbl>
<fct>
1
0.2
row1
2
0.4
row2
3
0.6
row3

# 將data保存為csv文件write.csv(data, file="d:/data.csv", row.names = FALSE)# 將data保存為txt文件,sep表示用sep分割列write.table(data, file ="d:/data.txt", sep =",", row.names =FALSE)# 讀取csv文件data <- read.csv("d:/data.csv", header=FALSE)dataA data.frame: 4 × 3
V1
V2
V3
<fct>
<fct>
<fct>
a
b
c
1
0.2
row1
2
0.4
row2
3
0.6
row3

# 讀取txt文件data <- read.table(file ="d:/data.txt", header = TRUE, sep=",", colClasses=c("integer","numeric","character"))dataA data.frame: 3 × 3
a
b
c
<int>
<dbl>
<chr>
1
0.2
row1
2
0.4
row2
3
0.6
row3

R將直觀地找出應該為dataframe中的列分配哪種數據類型。如果要手動分配,則可以通過在read.csv或read.table中使用colClasses參數進行設置,實際上,建議這樣做,因為它可以提高導入過程的效率。
2 復雜變量

2.1 向量基礎

如何創建一個向量
可以使用Combine函數即c()創建向量。該向量中可以包含的所有類型元素。此外,向量只能保存一種類型的數據,例如字符,數字,邏輯。如果嘗試在向量內創建數據類型的混合,例如字符和數字,所有數字都會自動轉換為字符。因為數字都可以轉換為字符,但是字符不都能轉換為數字,如’a’。
vec1 <- c(10, 20, 15, 40)  # 數字向量vec1vec2 <- c("a", "b", "c", NA)  # 字符向量vec2vec3 <- c(TRUE, FALSE, TRUE, TRUE)  # 邏輯向量vec3vec4 <- gl(4, 1, 4, label = c("l1", "l2", "l3", "l4"))  # 因子向量vec4vec5 <- c(4111, "2", 4)  # 混合變量vec5

  • 10
  • 20
  • 15
  • 40
  • 'a'
  • 'b'
  • 'c'
  • NA
  • TRUE
  • FALSE
  • TRUE
  • TRUE
  • l1
  • l2
  • l3
  • l4
Levels:

  • 'l1'
  • 'l2'
  • 'l3'
  • 'l4'
  • '4111'
  • '2'
  • '4'
如何引用向量的元素?
向量的元素可以使用其索引進行訪問。向量的第一個元素的索引為1,最后一個元素的索引值為length(vectorName)。這一點和其他語言不一樣,R語言索引從1開始。索引變量名[i,j]表示索引從i到j的值。
vec1length(vec1)  # 4print(vec1[1])  # 10print(vec1[1:3])  # 10, 20, 15

  • 10
  • 20
  • 15
  • 40
4
[1] 10[1] 10 20 15此外有時候我們需要初始化一個定長的向量,做法如下。
# 生長大度為10的向量,用0填充numericVector <- numeric(10)numericVector

  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
2.2 操縱向量

子集
vec1logic1 <- vec1 < 16  # 創建一個邏輯向量,小于16為true,反之falselogic1

  • 10
  • 20
  • 15
  • 40
  • TRUE
  • FALSE
  • TRUE
  • FALSE
vec1[logic1]  # 讀取位置為true的元素vec1[1:2]  # 讀取第一個和第二個元素vec1[c(1,3)]  # 讀取第一個和第三個元素vec1[-1]  # 返回所有元素,除了第一個。-1表示排除第一個元素,和其他語言不一樣。

  • 10
  • 15
  • 10
  • 20
  • 10
  • 15
  • 20
  • 15
  • 40
排序
sort(vec1)  # 從小到大排序sort(vec1, decreasing = TRUE)  # 從大到小排序

  • 10
  • 15
  • 20
  • 40
  • 40
  • 20
  • 15
  • 10
排序也可以使用order()函數實現,該函數以升序返回元素的索引。
vec1[order(vec1)]  # 從小到大vec1[rev(order(vec1))]  # 從大到小

  • 10
  • 15
  • 20
  • 40
  • 40
  • 20
  • 15
  • 10
創建向量序列和重復值
seq()和rep()函數用于創建自定義向量序列。rep()函數也可用于生成重復字符。
seq(1, 10, by = 2)  # 創建1到10的向量序列,步長為2seq(1, 10, length=5)  # 創建1到10的向量序列,等間隔獲得5個值rep(1, 5)  # 重復1,次數5次rep(1:3, 2)  # 重復1到3,次數兩次rep(1:3, each=2)  # 重復1到3,每個數字重復兩次

  • 1
  • 3
  • 5
  • 7
  • 9
  • 1
  • 3.25
  • 5.5
  • 7.75
  • 10
  • 1
  • 1
  • 1
  • 1
  • 1
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3
  • 1
  • 1
  • 2
  • 2
  • 3
  • 3
如何刪除缺失值
可以使用is.na()函數來處理缺失值,該函數會在缺失值(NA)的位置返回邏輯值為TRUE的邏輯向量
vec2 <- c("a", "b", "c", NA)  # character vectoris.na(vec2)  # missing TRUE!is.na(vec2)  # missing FALSEvec2[!is.na(vec2)]  # 返回非NA的元素

  • FALSE
  • FALSE
  • FALSE
  • TRUE
  • TRUE
  • TRUE
  • TRUE
  • FALSE
  • 'a'
  • 'b'
  • 'c'
采樣
set.seed(42)  # 設置隨機數種子,以vec1sample(vec1)  # 隨機從vec1中抽取所有數sample(vec1, 3)  # 隨機不放回從vec1中抽取3個數sample(vec1, 5, replace=T)  # 隨機放回從vec1中抽取5個數

  • 10
  • 20
  • 15
  • 40
  • 10
  • 40
  • 15
  • 20
  • 20
  • 40
  • 15
  • 10
  • 40
  • 15
  • 40
  • 15
2.3 數據框dataframe

創建數據框并訪問行和列
數據框是執行各種分析的方便且流行的數據對象。諸如read.csv()之類的導入語句會將數據作為數據幀導入R中,因此保持這種方式很方便。現在,使用我們之前創建的向量創建一個數據框。
vec1vec2vec3vec4

  • 10
  • 20
  • 15
  • 40
  • 'a'
  • 'b'
  • 'c'
  • NA
  • TRUE
  • FALSE
  • TRUE
  • TRUE
  • l1
  • l2
  • l3
  • l4
Levels:

  • 'l1'
  • 'l2'
  • 'l3'
  • 'l4'
# 每一個向量組成一列myDf1 <- data.frame(vec1, vec2)  myDf1myDf2 <- data.frame(vec1, vec3, vec4)myDf2myDf3 <- data.frame(vec1, vec2, vec3)myDf3A data.frame: 4 × 2
vec1
vec2
<dbl>
<fct>
10
a
20
b
15
c
40
NA

A data.frame: 4 × 3
vec1
vec3
vec4
<dbl>
<lgl>
<fct>
10
TRUE
l1
20
FALSE
l2
15
TRUE
l3
40
TRUE
l4

A data.frame: 4 × 3
vec1
vec2
vec3
<dbl>
<fct>
<lgl>
10
a
TRUE
20
b
FALSE
15
c
TRUE
40
NA
TRUE

內置數據集和基本操作
R帶有一組內置數據。為了進一步說明,我們將使用airquality數據集
library(datasets) # 初始化#library(help=datasets) # 展示數據集信息# 展示數據集頭部六行head(airquality)A data.frame: 6 × 6
Ozone
Solar.R
Wind
Temp
Month
Day
<int>
<int>
<dbl>
<int>
<int>
<int>
41
190
7.4
67
5
1
36
118
8.0
72
5
2
12
149
12.6
74
5
3
18
313
11.5
62
5
4
NA
NA
14.3
56
5
5
28
NA
14.9
66
5
6

接來介紹數據集data.frame基礎操作
class(airquality)  # dataframe類型sapply(airquality, class)  # 獲得dataframe每一列的類型str(airquality)  # dataframe的結構‘data.frame’
'integer' Solar.R 'integer' Wind 'numeric' Temp 'integer' Month 'integer' Day 'integer'
'data.frame': 153 obs. of  6 variables: $ Ozone  : int  41 36 12 18 NA 28 23 19 8 NA ... $ Solar.R: int  190 118 149 313 NA NA 299 99 19 194 ... $ Wind   : num  7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ... $ Temp   : int  67 72 74 62 56 66 65 59 61 69 ... $ Month  : int  5 5 5 5 5 5 5 5 5 5 ... $ Day    : int  1 2 3 4 5 6 7 8 9 10 ...summary(airquality)  # 數據集各列總結#fix(airquality)  # 類似excel的方式展示數據集Ozone           Solar.R           Wind             Temp       Min.   :  1.00   Min.   :  7.0   Min.   : 1.700   Min.   :56.00   1st Qu.: 18.00   1st Qu.:115.8   1st Qu.: 7.400   1st Qu.:72.00   Median : 31.50   Median :205.0   Median : 9.700   Median :79.00   Mean   : 42.13   Mean   :185.9   Mean   : 9.958   Mean   :77.88   3rd Qu.: 63.25   3rd Qu.:258.8   3rd Qu.:11.500   3rd Qu.:85.00   Max.   :168.00   Max.   :334.0   Max.   :20.700   Max.   :97.00   NA's   :37       NA's   :7                                            Month            Day       Min.   :5.000   Min.   : 1.0   1st Qu.:6.000   1st Qu.: 8.0   Median :7.000   Median :16.0   Mean   :6.993   Mean   :15.8   3rd Qu.:8.000   3rd Qu.:23.0   Max.   :9.000   Max.   :31.0rownames(airquality)  # dataframe行名colnames(airquality)  # dataframe列名nrow(airquality) # 行數ncol(airquality) # 列數

  • '1'
  • '2'
  • '3'
  • '4'
  • '5'
  • '6'
  • '7'
  • '8'
  • '9'
  • '10'
  • '11'
  • '12'
  • '13'
  • '14'
  • '15'
  • '16'
  • '17'
  • '18'
  • '19'
  • '20'
  • '21'
  • '22'
  • '23'
  • '24'
  • '25'
  • '26'
  • '27'
  • '28'
  • '29'
  • '30'
  • '31'
  • '32'
  • '33'
  • '34'
  • '35'
  • '36'
  • '37'
  • '38'
  • '39'
  • '40'
  • '41'
  • '42'
  • '43'
  • '44'
  • '45'
  • '46'
  • '47'
  • '48'
  • '49'
  • '50'
  • '51'
  • '52'
  • '53'
  • '54'
  • '55'
  • '56'
  • '57'
  • '58'
  • '59'
  • '60'
  • '61'
  • '62'
  • '63'
  • '64'
  • '65'
  • '66'
  • '67'
  • '68'
  • '69'
  • '70'
  • '71'
  • '72'
  • '73'
  • '74'
  • '75'
  • '76'
  • '77'
  • '78'
  • '79'
  • '80'
  • '81'
  • '82'
  • '83'
  • '84'
  • '85'
  • '86'
  • '87'
  • '88'
  • '89'
  • '90'
  • '91'
  • '92'
  • '93'
  • '94'
  • '95'
  • '96'
  • '97'
  • '98'
  • '99'
  • '100'
  • '101'
  • '102'
  • '103'
  • '104'
  • '105'
  • '106'
  • '107'
  • '108'
  • '109'
  • '110'
  • '111'
  • '112'
  • '113'
  • '114'
  • '115'
  • '116'
  • '117'
  • '118'
  • '119'
  • '120'
  • '121'
  • '122'
  • '123'
  • '124'
  • '125'
  • '126'
  • '127'
  • '128'
  • '129'
  • '130'
  • '131'
  • '132'
  • '133'
  • '134'
  • '135'
  • '136'
  • '137'
  • '138'
  • '139'
  • '140'
  • '141'
  • '142'
  • '143'
  • '144'
  • '145'
  • '146'
  • '147'
  • '148'
  • '149'
  • '150'
  • '151'
  • '152'
  • '153'
  • 'Ozone'
  • 'Solar.R'
  • 'Wind'
  • 'Temp'
  • 'Month'
  • 'Day'
153
6
用cbind和rbind增加數據
myDf1myDf2A data.frame: 4 × 2
vec1
vec2
<dbl>
<fct>
10
a
20
b
15
c
40
NA

A data.frame: 4 × 3
vec1
vec3
vec4
<dbl>
<lgl>
<fct>
10
TRUE
l1
20
FALSE
l2
15
TRUE
l3
40
TRUE
l4

cbind(myDf1, myDf2)  # 按列合并rbind(myDf1, myDf1)  # 按行合并A data.frame: 4 × 5
vec1
vec2
vec1
vec3
vec4
<dbl>
<fct>
<dbl>
<lgl>
<fct>
10
a
10
TRUE
l1
20
b
20
FALSE
l2
15
c
15
TRUE
l3
40
NA
40
TRUE
l4

A data.frame: 8 × 2
vec1
vec2
<dbl>
<fct>
10
a
20
b
15
c
40
NA
10
a
20
b
15
c
40
NA

dataframe索引
myDf1A data.frame: 4 × 2
vec1
vec2
<dbl>
<fct>
10
a
20
b
15
c
40
NA

myDf1$vec1  # 提取列vec1myDf1[, 2]  # 提取數據df[row.num, col.num]

  • 10
  • 20
  • 15
  • 40
  • a
  • b
  • c
  • <NA>
Levels:

  • 'a'
  • 'b'
  • 'c'
myDf1[, c(1,2)]  # 提取第一列和第二列myDf1[c(1:5), c(1)]  # 提取第一列的1到5行,A data.frame: 4 × 2
vec1
vec2
<dbl>
<fct>
10
a
20
b
15
c
40
NA


  • 10
  • 20
  • 15
  • 40
  • <NA>
subset和which函數
head(airquality)A data.frame: 6 × 6
Ozone
Solar.R
Wind
Temp
Month
Day
<int>
<int>
<dbl>
<int>
<int>
<int>
41
190
7.4
67
5
1
36
118
8.0
72
5
2
12
149
12.6
74
5
3
18
313
11.5
62
5
4
NA
NA
14.3
56
5
5
28
NA
14.9
66
5
6

下面代碼選擇day==1的列,但結果不顯示Temp列
subset(airquality, Day == 1, select = -Temp)A data.frame: 5 × 5


Ozone
Solar.R
Wind
Month
Day


<int>
<int>
<dbl>
<int>
<int>
1
41
190
7.4
5
1
32
NA
286
8.6
6
1
62
135
269
4.1
7
1
93
39
83
6.9
8
1
124
96
167
6.9
9
1

which函數選擇day==1的列的索引
which(airquality$Day==1)airquality[which(airquality$Day==1), -c(4)]

  • 1
  • 32
  • 62
  • 93
  • 124
A data.frame: 5 × 5


Ozone
Solar.R
Wind
Month
Day


<int>
<int>
<dbl>
<int>
<int>
1
41
190
7.4
5
1
32
NA
286
8.6
6
1
62
135
269
4.1
7
1
93
39
83
6.9
8
1
124
96
167
6.9
9
1

采樣
隨機從dataframe里分割樣本,比如分割訓練集和測試集
set.seed(100)trainIndex <- sample(c(1:nrow(airquality)), size=nrow(airquality)*0.7, replace=F)  # 獲得驗證集數據,比例0.7trainIndex

  • 102
  • 112
  • 151
  • 4
  • 55
  • 70
  • 98
  • 135
  • 7
  • 43
  • 140
  • 51
  • 25
  • 2
  • 68
  • 139
  • 48
  • 32
  • 85
  • 91
  • 121
  • 16
  • 116
  • 93
  • 45
  • 30
  • 128
  • 130
  • 87
  • 95
  • 97
  • 124
  • 29
  • 92
  • 31
  • 54
  • 41
  • 105
  • 117
  • 24
  • 144
  • 145
  • 63
  • 65
  • 9
  • 153
  • 20
  • 14
  • 78
  • 88
  • 3
  • 36
  • 27
  • 46
  • 59
  • 100
  • 69
  • 47
  • 149
  • 96
  • 138
  • 12
  • 142
  • 132
  • 56
  • 22
  • 82
  • 53
  • 103
  • 5
  • 44
  • 28
  • 52
  • 141
  • 42
  • 15
  • 57
  • 79
  • 37
  • 26
  • 114
  • 120
  • 109
  • 122
  • 111
  • 35
  • 58
  • 74
  • 137
  • 123
  • 90
  • 118
  • 75
  • 127
  • 101
  • 18
  • 8
  • 99
  • 77
  • 143
  • 19
  • 119
  • 23
  • 72
  • 66
  • 84
  • 106
# 訓練數據nrow(airquality[trainIndex, ])# 測試數據nrow(airquality[-trainIndex, ])107
46
合并數據
dataframe可以由公共列變量合并。在執行合并之前,不必對數據幀進行排序。如果“by”列具有不同的名稱,則可以使用by.x和by.y指定它們。內部/外部聯接、左聯接和右聯接可以使用merge()的all、all.x、all.y參數完成。在R控制臺中查看更多關于example(merge)的信息。
myDf1myDf2A data.frame: 4 × 2
vec1
vec2
<dbl>
<fct>
10
a
20
b
15
c
40
NA

A data.frame: 4 × 3
vec1
vec3
vec4
<dbl>
<lgl>
<fct>
10
TRUE
l1
20
FALSE
l2
15
TRUE
l3
40
TRUE
l4

merge(myDf1, myDf2, by="vec1")  # 以vec1合并A data.frame: 4 × 4
vec1
vec2
vec3
vec4
<dbl>
<fct>
<lgl>
<fct>
10
a
TRUE
l1
15
c
TRUE
l3
20
b
FALSE
l2
40
NA
TRUE
l4

3 高級函數

3.1 paste函數

paste()是一種拼接字符串并使用分隔符進行自定義的方法。有了清晰的理解,就可以方便地創建可以動態修改的長而復雜的字符串。
paste("a", "b")  # 拼接字符串'a'和'b'包含空格 "a b"paste0("a", "b")  # 無空格拼接字符串'a'和'b', "ab"paste("a", "b", sep="")  # sep設置拼接符是什么,類似paste0paste(c(1:4), c(5:8), sep="")  # "15" "26" "37" "48"paste(c(1:4), c(5:8), sep="", collapse="")  # "15263748"paste0(c("var"), c(1:5))  # "var1" "var2" "var3" "var4" "var5"paste0(c("var", "pred"), c(1:3))  # "var1" "pred2" "var3"paste0(c("var", "pred"), rep(1:3, each=2))  # "var1" "pred1" "var2" "pred2" "var3" "pred3‘a b’
‘ab’
‘ab’

  • '15'
  • '26'
  • '37'
  • '48'
‘15263748’

  • 'var1'
  • 'var2'
  • 'var3'
  • 'var4'
  • 'var5'
  • 'var1'
  • 'pred2'
  • 'var3'
  • 'var1'
  • 'pred1'
  • 'var2'
  • 'pred2'
  • 'var3'
  • 'pred3'
3.2 處理日期

dateString <- "07/02/2021"myDate <- as.Date(dateString, format="%d/%m/%Y") # 設置字符串class(myDate)  # 類別 "date"myDate‘Date’
2021-02-07
3.3 制作列連表

通過R語言的table函數可以制作列連表。
myDf1A data.frame: 4 × 2
vec1
vec2
<dbl>
<fct>
10
a
20
b
15
c
40
NA

table(myDf1)vec2vec1 a b c  10 1 0 0  15 0 0 1  20 0 1 0  40 0 0 0同樣,對于dataframe,要在行中顯示的變量將作為table()的第一個參數,而列變量將作為第二個參數。
table(airquality$Month[c(1:60)], airquality$Temp[c(1:60)])56 57 58 59 61 62 64 65 66 67 68 69 72 73 74 75 76 77 78 79 80 81 82 84 85  5  1  3  2  2  3  2  1  1  3  2  2  2  1  1  2  0  1  0  0  1  0  1  0  0  0  6  0  0  0  0  0  0  0  1  0  1  0  0  1  2  1  1  4  3  2  2  2  0  2  1  1       87 90 92 93  5  0  0  0  0  6  2  1  1  13.4 列表

列表非常重要。如果需要捆綁不同長度和類別的對象,則可以使用列表來實現。
myList <- list(vec1, vec2, vec3, vec4)myList

  • 10
  • 20
  • 15
  • 40
  • 'a'
  • 'b'
  • 'c'
  • NA
  • TRUE
  • FALSE
  • TRUE
  • TRUE
  • l1
  • l2
  • l3
  • l4
Levels:

  • 'l1'
  • 'l2'
  • 'l3'
  • 'l4'
3.5 If-Else語句

if else語句結構如下
if(checkConditionIfTrue) {  ....statements..  ....statements..} else {   # place the 'else' in same line as '}'  ....statements..  ....statements..}x<-2if(x>1)    {    print(x)}else    {    print("None")}[1] 23.6 for循環

格式如下
for(counterVar in c(1:n)){  .... statements..}for (x in c(1:5))    {    print(x)}[1] 1[1] 2[1] 3[1] 4[1] 53.7 apply類別函數

apply
apply():按數據行或矩陣按行或列應用函數。
myData <- matrix(seq(1,16), 4, 4)  # 生成一個矩陣myDataA matrix: 4 × 4 of type int
1
5
9
13
2
6
10
14
3
7
11
15
4
8
12
16

apply(myData, 1, FUN=min)  # 1代表行,按行應用min函數apply(myData, 2, FUN=min)  # 2代表列,按列應用min函數

  • 1
  • 2
  • 3
  • 4
  • 1
  • 5
  • 9
  • 13
apply(data.frame(1:5), 1, FUN=function(x) {x^2} ) # square of 1,2,3,4,5

  • 1
  • 4
  • 9
  • 16
  • 25
lapply()
lapply():將函數應用于列表中的每個元素,或將其應用于數據框的列,并將結果作為列表返回
lapply(airquality, class)'integer' $Solar.R 'integer' $Wind 'numeric' $Temp 'integer' $Month 'integer' $Day 'integer'
sapply
sapply():將函數應用于列表的每個元素,或將其應用于dataframe的列,并將結果作為向量返回。
sapply(airquality, class)'integer' Solar.R 'integer' Wind 'numeric' Temp 'integer' Month 'integer' Day 'integer'
3.8 使用tryCatch()處理錯誤

該trycatch()函數在花括號內編寫了三個塊,try()我們前面看到的函數一樣,可以在第一組花括號內使用多行代碼。如果在第一個塊的任何一條語句中遇到錯誤,則生成的錯誤消息將存儲在err錯誤處理函數使用的變量(請參見下面的代碼)中。您可以選擇打印出此錯誤消息,進行其他計算或執行任何所需的操作。您甚至還可以在此函數內執行一組完全不同的邏輯,而不涉及錯誤消息。最后一組finally而不管是否發生錯誤,都必須執行。您可以選擇忽略將任何語句完全添加到此部分。
tryCatch(    {1 <- 1; print("Lets create an error")    }, # First blockerror=function(err){    print(err); print("Error Line")},  # Second Block(optional)finally = {    print("finally print this")})# Third Block(optional)<simpleError in 1 <- 1: (do_set)賦值公式左手不對>[1] "Error Line"[1] "finally print this"4 參考


  • ??R-Tutorial??
  • 在 Jupyter Notebook 中使用R語言
  • R語言個人筆記
分享到:
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

交流熱線
17501437970 周一至周日:09:00 - 21:00

創贏網-致力于幫助普通人在創業之路上披荊斬棘、走向成功的專業網站,匯聚創新智慧與成功機遇的網絡天地,是創業者開啟贏之征程的首選之地。

Powered by Discuz! X3.5 © 2023-2050 CHUANYING Team.

QQ|Archiver|手機版|小黑屋|創贏網 ( 湘ICP備17022177號-3 )

GMT+8, 2025-10-30 04:27 , Processed in 0.286163 second(s), 23 queries .

快速回復 返回頂部 返回列表
欧美深夜视频_国产精品99视频_国产精品网站一区_亚洲最大av网
天天综合网 天天综合色| 午夜伦理一区二区| 日本伊人午夜精品| 日韩一区和二区| 麻豆91精品91久久久的内涵| 精品久久久久久久久久久久久久久 | 午夜婷婷国产麻豆精品| 91麻豆精品国产| 国产精品1024| 一区二区三区在线播| 日韩一区二区三区三四区视频在线观看 | 精品国产91乱码一区二区三区 | 欧美一区二区三区四区五区 | 久久久午夜精品| 色综合色综合色综合| 日韩二区在线观看| 国产精品蜜臀av| 337p亚洲精品色噜噜狠狠| 国产精品1024久久| 天堂在线一区二区| 亚洲女与黑人做爰| 2024国产精品| 在线综合视频播放| 91蜜桃在线观看| 久久99热狠狠色一区二区| 一区二区三区在线视频观看| 久久久久久黄色| 欧美一区二区三区系列电影| 欧美综合视频在线观看| 粉嫩av亚洲一区二区图片| 五月天久久比比资源色| 亚洲色欲色欲www| 国产亚洲综合性久久久影院| 69久久99精品久久久久婷婷| 日本福利一区二区| 成人黄动漫网站免费app| 久久99国产精品久久99| 日韩黄色免费网站| 一区二区三区四区在线播放| 国产清纯白嫩初高生在线观看91 | 久久综合九色综合久久久精品综合 | 欧美一区二区日韩| 欧美日韩日日夜夜| 欧美特级限制片免费在线观看| 大白屁股一区二区视频| 国产一区二区中文字幕| 久久国产精品无码网站| 精久久久久久久久久久| 亚洲精品大片www| 欧美老女人在线| 国产成人av电影免费在线观看| 久久精品国产999大香线蕉| 亚洲色图视频网站| 欧美国产综合色视频| 国产成人免费高清| 免费三级欧美电影| 粉嫩13p一区二区三区| 欧美挠脚心视频网站| 欧美一级免费大片| 国产精品白丝在线| 国产盗摄一区二区| 亚洲另类一区二区| 天堂精品中文字幕在线| 久草在线在线精品观看| 日韩免费一区二区三区在线播放| 中文字幕乱码一区二区免费| 亚洲人成人一区二区在线观看 | 中文字幕免费观看一区| 国产精品视频观看| 国产精品私人影院| 亚洲日本青草视频在线怡红院| 日本一区二区三区免费乱视频 | 国内精品伊人久久久久av一坑| 久久精品久久综合| 美国毛片一区二区三区| 久久爱另类一区二区小说| 久久国产精品露脸对白| av色综合久久天堂av综合| 一本色道久久综合亚洲aⅴ蜜桃| 91小视频免费看| 欧美精品久久99| 精品久久久久99| 亚洲欧美中日韩| 天堂久久一区二区三区| 国产伦理精品不卡| 色婷婷综合久久久| 精品日韩一区二区三区 | 亚洲一区二区三区中文字幕在线| 天天射综合影视| 精品综合免费视频观看| eeuss国产一区二区三区| 色综合色狠狠天天综合色| 日韩欧美国产wwwww| 国产精品福利av| 免费日本视频一区| 91色视频在线| 国产女主播在线一区二区| 一区二区三区久久久| 国产在线看一区| 欧美日韩另类一区| 国产三级欧美三级| 亚洲成人免费视频| eeuss鲁片一区二区三区在线观看| 欧美一区二区在线免费观看| 亚洲婷婷综合久久一本伊一区| 日韩黄色小视频| 在线影视一区二区三区| 国产夜色精品一区二区av| 日产国产高清一区二区三区 | 色视频欧美一区二区三区| 精品国产三级a在线观看| 一区二区三区日韩| 成人毛片视频在线观看| 91精品国产色综合久久| 亚洲宅男天堂在线观看无病毒 | 精品一区二区三区免费观看| 欧美日韩一区二区电影| 亚洲欧美偷拍卡通变态| 国产 日韩 欧美大片| 日韩免费看网站| 日日摸夜夜添夜夜添国产精品| 在线观看一区二区精品视频| 中文字幕中文字幕一区二区 | 色菇凉天天综合网| 国产精品久久久久一区| 国产精品一区二区三区乱码| 久久午夜色播影院免费高清| 婷婷六月综合亚洲| 欧美精三区欧美精三区| 一区二区三区四区在线| 色综合色综合色综合色综合色综合 | 午夜免费久久看| 91超碰这里只有精品国产| 午夜婷婷国产麻豆精品| 在线成人av影院| 国内精品写真在线观看| 久久久午夜电影| 成人免费av在线| 亚洲欧美视频在线观看视频| 色婷婷综合激情| 日韩av中文字幕一区二区 | 亚洲综合免费观看高清完整版在线| 国产成人自拍网| 中文字幕一区二区三区不卡| 色噜噜狠狠成人中文综合| 亚洲久草在线视频| 欧美色成人综合| 久久国产夜色精品鲁鲁99| 精品国产麻豆免费人成网站| 久久成人免费网| 国产精品麻豆网站| 欧美婷婷六月丁香综合色| 日韩高清不卡一区二区三区| 久久久久88色偷偷免费| 99久久久精品| 亚洲1区2区3区视频| 欧美精品一区在线观看| av成人免费在线| 亚洲大片在线观看| 久久久久久久久岛国免费| 色综合天天视频在线观看 | 欧美美女一区二区在线观看| 中文字幕成人在线观看| 91偷拍与自偷拍精品| 视频一区二区三区中文字幕| ww亚洲ww在线观看国产| 色婷婷亚洲一区二区三区| 免费人成网站在线观看欧美高清| 欧美国产精品一区二区三区| 欧美天堂一区二区三区| 国产成人免费高清| 污片在线观看一区二区| 欧美国产日韩精品免费观看| 欧美一区二区三区成人| 91免费精品国自产拍在线不卡| 日韩中文字幕麻豆| 自拍偷自拍亚洲精品播放| 337p粉嫩大胆噜噜噜噜噜91av| 99久久久国产精品免费蜜臀| 国产在线不卡一区| 香蕉成人伊视频在线观看| 中文字幕欧美激情| 精品国产一区二区三区久久久蜜月 | 日韩中文字幕91| 亚洲女同女同女同女同女同69| 国产农村妇女精品| 日韩一区二区电影| 欧美肥大bbwbbw高潮| 91久久人澡人人添人人爽欧美 | 欧美探花视频资源| 99久久国产免费看| 国产麻豆精品在线观看| 天天综合天天做天天综合| 亚洲综合丝袜美腿| 亚洲色图视频网站| 亚洲欧美另类图片小说| 亚洲欧洲色图综合| 综合久久国产九一剧情麻豆| 国产精品国模大尺度视频| 日本一区二区三区久久久久久久久不 |