日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

在大多數情況下,結構化的醫學數據是一個由很多行和很多列組成的數據集。在R中,這種數據集被稱為數據框。在學習數據框之前,我們先來認識一些用于存儲數據的數據結構:向量、因子、矩陣、數組和列表。這些數據結構在存儲類型、創建方式和操作方式等方面均有所不同,熟悉它們的基本概念和操作技巧,將會讓我們能夠靈活高效地處理數據。

2.1.1 向量

向量(vector)是用于存儲數值型、字符型、邏輯型數據的一維數組。標量可以看作是只含有一個元素的向量。函數c( )可用來創建向量,例如:

> x1 <- c(2, 4, 1, -2, 5)
> x2 <- c("one", "two", "three")
> x3 <- c(TRUE, FALSE, TRUE, FALSE)

這里x1是數值型向量,x2是字符型向量,而x3是邏輯型向量。每一個向量中的數據類型必須一致。如果想創建有規律的向量,R提供了一些簡便的操作和函數,例如:

> x4 <- 1:5   # 等價于x4 <- c(1, 2, 3, 4, 5)
> x5 <- seq(from = 2, to = 10, by = 2)   # 等價于x5 <- c(2, 4, 6, 8, 10)
> x6 <- rep("a", times = 4)   # 等價于x6 <- c("a", "a", "a", "a")

有時候我們只想使用向量中的某個部分,即選取向量的子集。假設有一個從3到100的步長為7的整數向量,那么第5個數的值是多少呢?

> x <- seq(from = 3, to = 100, by = 7)
> x
 [1]  3 10 17 24 31 38 45 52 59 66 73 80 87 94

請注意,向量x的最后一個數并不是100而是94,因為94再加一個步長7,結果就將超過100了。

> x[5]
[1] 31

在方括號“[ ]”中的數字被稱為下標,它指定向量的索引位置。在上面的命令里,x[5]表示向量的第5個元素,其值為31。下面的命令顯示向量的第4、第6和第7個元素:

> x[c(4, 6, 7)]
[1] 24 38 45

下標中的向量可以取負值,表示去除指定位置上的元素。例如,要去掉x的前4個元素,可以輸入下面的代碼(注意命令里的括號):

> x[-(1:4)]
 [1] 31 38 45 52 59 66 73 80 87 94

R中的運算都是向量化的,例如:

> weight <- c(68, 72, 57, 90, 65, 81)
> height <- c(1.75, 1.80, 1.65, 1.90, 1.72, 1.87)
> bmi <- weight / height ^ 2
> bmi
[1] 22.20408 22.22222 20.93664 24.93075 21.97134 23.16337

在上面計算bmi的過程中,運算符“^”被循環使用了,所以計算的結果仍然是一個向量。如果參與運算的向量的長度不一致,R會自動補全后計算,同時給出警告信息。

> a <- 1:5
> b <- 1:3
> a + b
[1] 2 4 6 5 7
Warning message:
In a + b : longer object length is not a multiple of shorter object length

上面向量a的長度為5,向量b的長度為3。在計算a + b時,因為向量b的長度比向量a的短,所以向量b會從第一個元素開始循環使用。因此,在最后的輸出中,a中的第四個元素4加上了b的第一個元素1,a中的第五個元素5加上了b的第二個元素2。

R提供了種類繁多的計算統計量的函數,常用的統計函數見表2-1。用這些函數計算向量的統計量非常方便。下面這段代碼演示了其中的幾個函數作用于向量bmi后的輸出結果。

> length(bmi)     # 計算向量bmi的長度
[1] 6
> mean(bmi)       # 計算向量bmi的均值
[1] 22.5714
> var(bmi)        # 計算向量bmi的樣本方差
[1] 1.841265
> sd(bmi)        # 計算向量bmi的樣本標準差
[1] 1.356932

表2-1 常用的統計函數

R語言中包括哪些數據結構?

 

2.1.2 因子

一般來說,變量有數值型、名義型和有序型之分。名義型變量是沒有順序關系的分類變量,例如人的性別、血型、民族等。而有序型變量是有層級和順序關系的分類變量,如患者的病情(較差、好轉、很好)。名義型變量和有序型變量在R中稱為因子(factor)。因子在R中非常重要,它決定了數據的展示和分析方式。數據存儲時因子經常以整數向量形式存儲。所以在進行數據分析之前,經常需要將它們用函數factor( )轉換為因子。例如:

> sex <- c(1, 2, 1, 1, 2, 1, 2)
> sex.f <- factor(sex, levels = c(1, 2), labels = c("Male", "Female"))
> sex.f
[1] Male   Female Male   Male   Female Male   Female
Levels: Male Female

上面的命令先定義了一個變量sex表示性別,假設其取值1表示男性,2表示女性。接著用函數factor( )將變量sex轉換成了因子并存為對象sex.f,其中參數levels表示原變量的分類標簽值,參數labels表示因子取值的標簽。注意,這兩個參數在賦值時需要一一對應,R會將它們相關聯。因子型變量與一般的字符型變量的區別就是它有一個水平(level)屬性。因子的屬性可以使用函數levels( )查看:

> levels(sex.f)
[1] "Male"   "Female"

在統計模型中,對于因子型變量,R會將其第一個水平當作參考組。很多時候我們需要改變因子水平的排列順序以改變參考組,這可以通過兩種方法實現。第一種方法是在函數factor( )中改變參數levels和labels的排列順序,例如:

> sex.f1 <- factor(sex, levels = c(2, 1), labels = c("Female", "Male"))
> sex.f1[1] Male   Female Male   Male   Female Male   Female
Levels: Female Male

第二種方法是使用函數relevel( ):

> sex.f1 <- relevel(sex.f, ref = "Female")
> sex.f1[1] Male   Female Male   Male   Female Male   Female
Levels: Female Male

要表示有序因子,需要在函數factor( )里指定參數ordered = TRUE。例如:

> status <- c(1, 2, 2, 3, 1, 2, 2)
> status.f <- factor(status, 
                     levels = c(1, 2, 3), 
                     labels = c("Poor", "Improved", "Excellent"), 
                     ordered = TRUE)
> status.f
[1] Poor  Improved  Improved  Excellent  Poor  Improved  Improved 
Levels: Poor < Improved < Excellent

2.1.3 矩陣

矩陣(matrix)是一個由行和列組成的二維數組。矩陣里的每個元素具有相同的模式(數值型、字符型或邏輯型)。在大多數情況下,矩陣里的元素是數值型的,它具有很多數學特性和運算方式,可以用來進行統計計算,例如因子分析、廣義線性模型等。函數 matrix( )常用于創建矩陣,例如:

> M <- matrix(1:6, nrow = 2)
> M
    [,1] [,2] [,3]
[1,]   1    3   5
[2,]   2    4   6

上面的命令用向量1到6創建了一個行數為2的矩陣,R會根據向量的長度和參數nrow設定的行數自動計算列數。參數byrow默認為FALSE,即按列將數值進行排列,如果需要按行排列,只需將參數byrow設為TRUE。

常見的矩陣運算都可以在R中實現,如矩陣加法、矩陣乘法、求逆矩陣、矩陣轉置、求方陣的行列式、求方陣的特征值和特征向量等。

矩陣乘法中要求第一個矩陣的列數等于第二個矩陣的行數,其運算符為“%*%”。先創建兩個矩陣:

> mat1 <- matrix(1:6, nrow = 3)
> mat1
    [,1] [,2]
[1,]   1    4
[2,]   2    5
[3,]   3    6
> mat2 <- matrix(5:10, nrow = 2)
> mat2
    [,1] [,2] [,3]
[1,]   5    7   9
[2,]   6    8  10

函數dim( )可以得到矩陣的維數,即行數和列數:

> dim(mat1)
[1] 3 2
> dim(mat2)
[1] 2 3

結果表明,mat1是一個3行2列的矩陣,mat2是一個2行3列的矩陣,因此它們可以相乘,結果應該是一個3行3列的矩陣。

> mat1 %*% mat2
    [,1] [,2] [,3]
[1,]  29   39  49
[2,]  40   54  68
[3,]  51   69  87

矩陣的轉置運算就是把矩陣的行和列互換。例如,求矩陣mat1的轉置矩陣:

> t(mat1)
    [,1] [,2] [,3]
[1,]   1    2   3
[2,]   4    5   6

求方陣的行列式和逆矩陣分別可以使用函數det( )和函數solve( )實現,例如:

> mat3 <- matrix(1:4, nrow = 2)
> det(mat3)
[1] -2
> solve(mat3)
    [,1] [,2]
[1,]  -2  1.5
[2,]   1 -0.5

此外,我們還可以對矩陣按行、列求和或者求平均,例如:

> rowSums(mat1)
[1] 5 7 9
> colSums(mat1)
[1]  6 15
> rowMeans(mat1)
[1] 2.5 3.5 4.5
> colMeans(mat1)
[1] 2 5

與矩陣運算有關的函數在此無法一一詳述,讀者有需要時可以通過查閱CRAN的相關文檔了解更多矩陣運算函數用法的細節。

使用索引訪問矩陣元素也是矩陣的基本操作,與向量類似,我們可以用“[]”來索引訪問矩陣中的元素。不同的是,對于矩陣,在“[ ]”中需要用逗號分隔行號和列號。例如,選取矩陣mat1的前兩行和前兩列,可以使用下面的命令:

> mat1[1:2, 1:2]
    [,1] [,2]
[1,]   1    4
[2,]   2    5

如果省略了行號或列號,則表示選取所有行或者所有列,例如:

> mat1[2:3,]
    [,1] [,2]
[1,]   2    5
[2,]   3    6

2.1.4 數組

通常所說的數組(array)指的是多維數組,它與矩陣類似,但是維數大于2。數組有一個特殊的維數(dim)屬性。下面的命令給一個向量加上維數后定義了一個數組,請注意數值的排列順序。

> A <- 1:24
> dim(A) <- c(3, 4, 2)
> A
, , 1
    [,1] [,2] [,3] [,4]
[1,]   1    4   7  10
[2,]   2    5   8  11
[3,]   3    6   9  12
, , 2
    [,1] [,2] [,3] [,4]
[1,]  13   16  19  22
[2,]  14   17  20  23
[3,]  15   18  21  24

上面的數組還可以通過函數array( )創建,并給各個維度添加名稱和標簽。

> dim1 <- c("A1", "A2", "A3")
> dim2 <- c("B1", "B2", "B3", "B4")
> dim3 <- c("C1", "C2")
> array(1:24, dim = c(3, 4, 2), dimnames = list(dim1, dim2, dim3))
, , C1
  B1 B2 B3 B4
A1 1  4  7 10
A2 2  5  8 11
A3 3  6  9 12
, , C2
   B1 B2 B3 B4
A1 13 16 19 22
A2 14 17 20 23
A3 15 18 21 24

2.1.5 列表

列表(list)是R中最靈活也最復雜的一種數據結構,它可以由不同類型的對象混合組成。例如,它可以是向量、數組、表格和任意類型對象的組合。

> list1 <- list(a = 1, b = 1:5, c = c("red", "blue", "green"))
> list1$a[1] 1
$b[1] 1 2 3 4 5
$c[1] "red"   "blue"   "green"

注意,函數list( )的參數由一系列新對象組成,這些對象從現有對象或值中分配值。顯示列表時,每個新對象名都以符號“$”作為前綴。

在普通的數據分析中,創建列表并不是一項常見的任務。但是,很多函數的返回值是一個列表。例如:

> set.seed(123)
> dat <- rnorm(10) 
> bp <- boxplot(dat)> class(bp)
[1] "list"

上面的命令用函數rnorm( )從標準正態分布中生成了一個由10個數組成的隨機樣本。為了使結果具有可重復性,我們在該命令前用函數set.seed( )設置了生成隨機數的種子。如果不設定種子,每次顯示的結果很可能不同。然后,用函數boxplot( )對這個隨機樣本作箱線圖,并把結果保存為bp。函數class( )用于查看對象的類型,這里bp是一個列表。查看這個列表里面的內容:

> bp
$stats
          [,1]
[1,] -1.26506123
[2,] -0.56047565
[3,] -0.07983455
[4,]  0.46091621
[5,]  1.71506499
$n
[1] 10
$conf
         [,1]
[1,] -0.5901626
[2,]  0.4304935
$out
numeric(0)
$group
numeric(0)
$names
[1] "1"

這里列表bp包含了多個對象,如果想查看或使用某一個對象,只需用“$”符號引用。例如,要查看列表bp中的對象stats的內容,可以輸入:

> bp$stats
          [,1]
[1,] -1.26506123
[2,] -0.56047565
[3,] -0.07983455
[4,]  0.46091621
[5,]  1.71506499

2.1.6 數據框

數據框(dataframe)是一個由行和列組成的二維結構,其中行表示觀測(observation)或記錄(record),列表示變量(variable)或指標(indicator)。數據框與Excel、SAS和SPSS中的數據集類似。數據框看起來與矩陣很相似,而且矩陣的很多操作也適用于數據框,如子集的選擇。與矩陣不同的是,數據框里不同的列可以是不同模式(數值型、字符型等)的數據。數據框可以通過函數data.frame( )創建。例如,下面的代碼創建了一個包含5個觀測對象、4個變量的數據框:

> ID <- 1:5
> sex <- c("male", "female", "male", "female", "male")
> age <- c(25, 34, 38, 28, 52)
> pain <- c(1, 3, 2, 2, 3)
> pain.f <- factor(pain,
+                  levels = 1:3,
+                  labels = c("mild", "medium", "severe"))
> patients <- data.frame(ID, sex, age, pain.f)
> patients
  ID    sex  age  pain.f
1  1   male   25  mild
2  2 female   34  severe
3  3   male   38  medium
4  4 female   28  medium
5  5   male   52  severe

數據框本質上也是一種列表,要顯示或使用數據框的某一變量(列),可以使用“$”符號加上變量名。例如:

> patients$age
[1] 25 34 38 28 52
> mean(patients$age)
[1] 35.4

大部分結構化的醫學數據集均以數據框的形式呈現,因此,數據框是本書中最常處理的數據結構。關于數據框的操作將在第3章中詳細討論。

2.1.7 數據類型的轉換

在進行數據分析時,分析者需要對數據的類型熟稔于心,因為數據分析方法的選擇與數據的類型是有密切聯系的。R提供了一系列用于判斷某個對象的數據類型的函數,還提供了將某種數據類型轉換為另一種數據類型的函數。這些函數都存在于基本包base里,表2-2列出了其中的一部分常用函數。

表2-2 數據類型的判斷與轉換函數

R語言中包括哪些數據結構?

 

以“is.”開頭的函數的返回值為TRUE或FALSE,而以“as.”開頭的函數將對象轉換為相應的類型。例如:

> x <- c(2, 5, 8)
> is.numeric(x)
[1] TRUE
> is.vector(x)
[1] TRUE
> y <- as.character(x)
> y
[1] "2" "5" "8"
> is.numeric(y)
[1] FALSE
> is.character(y)
[1] TRUE
> z <- c(TRUE, FALSE, TRUE, FALSE)
> is.logical(z)
[1] TRUE
> as.numeric(z)
[1] 1 0 1 0

本文摘自《 R語言醫學數據分析實戰》

分享到:
標簽:語言
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定