列表
1-列表
列表可以包含不同類型的對象,也就是說,列表不是將某些具體的值組織起來,而是組織R對象。列表將數(shù)據(jù)組織在一個一維集合中。
列表非常好用,因為它可以裝任何類型的對象,不要求數(shù)據(jù)之間是同質的。
創(chuàng)建列表
list()
> list1 <- list(100:130, "R", list(TRUE, FALSE))
> list1
[[1]]
[1] 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
[18] 117 118 119 120 121 122 123 124 125 126 127 128 129 130
[[2]]
[1] "R"
[[3]]
[[3]][[1]]
[1] TRUE
[[3]][[2]]
[1] FALSE
?以上代碼,創(chuàng)建了一個列表,其中第一個元素是一個長度為31的數(shù)值型向量,第二個元素是一個長度為1的字符串,而第三個元素是一個長度為2的新列表。list函數(shù)創(chuàng)建列表的方式與c函數(shù)創(chuàng)建向量的方式相似,不同的元素使用逗號分開。
解釋上述的輸出結果:雙中括號索引,如[[1]]表示展示的內容來自列表的第一個元素。單中括號索引,表示在其之后顯示的內容來自列表某元素的哪一個子元素。例如,100是該列表抵押給元素的第一個子元素。"R"是列表第二個元素的第一個子元素。
2-從列表中提取成分的內容
列表中的每個成分是一個對象,比如向量、數(shù)據(jù)框、矩陣、列表
- ?使用$,通過成分名字來提取該成分下的內容;
- 使用雙括號,例如[[n]]來提取第n個成分的內容。這里n可以是索引或者成分名字。
以下是具體的例子:
> lst <- list(numbers = c(1,2), logical = TRUE, strings = c("a", "b", "c"))
> lst
$numbers
[1] 1 2
$logical
[1] TRUE
$strings
[1] "a" "b" "c"
> lst[[1]]
[1] 1 2
> lst$numbers
[1] 1 2
3-提取列表子集
列表子集:從列表中提取多個成分及內容,得到的是列表,可以使用一個括號[ ]來提取列表子集。在[ ]中可以用字符向量表示成分名稱,用數(shù)值向量表示成分位置, 或者用邏輯向量指定是否選擇來提取列表成分。
> lst <- list(numbers = c(1,2), logical = TRUE, strings = c("a", "b", "c"))
> lst
$numbers
[1] 1 2
$logical
[1] TRUE
$strings
[1] "a" "b" "c"
> lst[1]
$numbers
[1] 1 2
數(shù)據(jù)框-data.frame
1-數(shù)據(jù)框
數(shù)據(jù)框可以看作類似是EXCEL表,各列數(shù)據(jù)類型允許不同,每一列數(shù)據(jù)類型相同。在R中數(shù)據(jù)框那個是特殊的列表,其每個列表元素都是一個長度相同的向量。
函數(shù)data.frame()可以生成數(shù)據(jù)框,只適合小數(shù)據(jù)場景,數(shù)據(jù)量比較大的時候,建議將數(shù)據(jù)導入到R中。
> d <- data.frame(
+ name=c("李明", "張聰", "王建"),
+ age=c(30, 35, 28),
+ height=c(180, 162, 175),
+ stringsAsFactors=FALSE)
> print(d)
name age height
1 李明 30 180
2 張聰 35 162
3 王建 28 175
?data.frame()函數(shù)會將字符型列轉換成因子,加選項stringsAsFactors=FALSE可以避免這樣的轉換。
2-數(shù)據(jù)框內容訪問
訪問第二列,是一個向量:d[[2]],d[["age"]], d[,2], d[, "age"] (注:后面兩種做法與tibble不兼容,應避免使用)
> d[,"age"]
[1] 30 35 28
> d[[2]]
[1] 30 35 28
> d[["age"]]
[1] 30 35 28
> d[,2]
[1] 30 35 28
> d[,"age"]
[1] 30 35 28
訪問數(shù)據(jù)框的第二個元素,此時把數(shù)據(jù)框當作列表來看,返回的結果仍是一個數(shù)據(jù)框。
> d[2]
age
1 30
2 35
3 28
> d["age"]
age
1 30
2 35
3 28
> class(d[2])
[1] "data.frame"
數(shù)據(jù)框-tibble
數(shù)據(jù)框-tibble
數(shù)據(jù)框是一個隨著R語言前身S語言繼承下來的概念,現(xiàn)在已經有一些不足之處,tibble包提供了tibble類,這是數(shù)據(jù)框的一個改進版本。
Hadley在tibble包中引入了一種tibble數(shù)據(jù)框,以代替data.frame,并且tidyverse包都是基于tibble數(shù)據(jù)框的。
創(chuàng)建數(shù)據(jù)框tibble,注只適應于數(shù)據(jù)量比較小的情況。
- 若干列向量創(chuàng)建tibble;
- 按行錄入數(shù)據(jù)的方式創(chuàng)建tibble。
> t.bp <- tibble(
+ `序號`=c(1,5,6,9,10,15),
+ `收縮壓`=c(145, 110, "未測", 150, "拒絕", 115))
> t.bp
# A tibble: 6 × 2
序號 收縮壓
<dbl> <chr>
1 1 145
2 5 110
3 6 未測
4 9 150
5 10 拒絕
6 15 115
> t.bp2 <- tribble(
+ ~`序號`,~`收縮壓`,
+ 1,145,
+ 5,110,
+ 6,NA,
+ 9,150,
+ 10,NA,
+ 15,115
+ )
> t.bp2
# A tibble: 6 × 2
序號 收縮壓
<dbl> <dbl>
1 1 145
2 5 110
3 6 NA
4 9 150
5 10 NA
6 15 115
注意:tribble() 中數(shù)據(jù)每行末尾也需要有逗號,最后一行末尾沒有逗號。
tibble比數(shù)據(jù)框好的地方:
- tibble 與數(shù)據(jù)框的一大區(qū)別是在顯示時不自動顯示所有內容,這樣可以避免顯示很大的數(shù)據(jù)框將命令行的所有顯示都充滿。
- tibble 在生成或輸入時不自動將字符型列轉換為因子。
數(shù)據(jù)框內容訪問:
雙中括號,訪問元素的內容;
單中括號,訪問數(shù)據(jù)框子集。
> t.bp2[[1]]
[1] 1 5 6 9 10 15
> t.bp2[1]
# A tibble: 6 × 1
序號
<dbl>
1 1
2 5
3 6
4 9
5 10
6 15
總結數(shù)據(jù)框和列表的訪問:
由于數(shù)據(jù)框是特殊的列表,所以二者可以使用一套訪問方法,即文章來源:http://www.zghlxwxcb.cn/news/detail-607623.html
- 單中括號訪問子集;
- 雙中括號訪問元素內容;
參考:文章來源地址http://www.zghlxwxcb.cn/news/detail-607623.html
- R語言入門與實踐--馮凌秉譯
- Rbook_PKU_李東風
- R語言編程-張敬信
到了這里,關于R語言學習筆記--列表list、數(shù)據(jù)框的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!