网站一年续费多少钱建站工具的优点
列表
1-列表
列表可以包含不同类型的对象,也就是说,列表不是将某些具体的值组织起来,而是组织R对象。列表将数据组织在一个一维集合中。
列表非常好用,因为它可以装任何类型的对象,不要求数据之间是同质的。
创建列表
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 
以上代码,创建了一个列表,其中第一个元素是一个长度为31的数值型向量,第二个元素是一个长度为1的字符串,而第三个元素是一个长度为2的新列表。list函数创建列表的方式与c函数创建向量的方式相似,不同的元素使用逗号分开。
解释上述的输出结果:双中括号索引,如[[1]]表示展示的内容来自列表的第一个元素。单中括号索引,表示在其之后显示的内容来自列表某元素的哪一个子元素。例如,100是该列表抵押给元素的第一个子元素。"R"是列表第二个元素的第一个子元素。
2-从列表中提取成分的内容
列表中的每个成分是一个对象,比如向量、数据框、矩阵、列表
- 使用$,通过成分名字来提取该成分下的内容;
 - 使用双括号,例如[[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-提取列表子集
列表子集:从列表中提取多个成分及内容,得到的是列表,可以使用一个括号[ ]来提取列表子集。在[ ]中可以用字符向量表示成分名称,用数值向量表示成分位置, 或者用逻辑向量指定是否选择来提取列表成分。
> 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 
数据框-data.frame
1-数据框
数据框可以看作类似是EXCEL表,各列数据类型允许不同,每一列数据类型相同。在R中数据框那个是特殊的列表,其每个列表元素都是一个长度相同的向量。
函数data.frame()可以生成数据框,只适合小数据场景,数据量比较大的时候,建议将数据导入到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()函数会将字符型列转换成因子,加选项stringsAsFactors=FALSE可以避免这样的转换。
2-数据框内容访问
访问第二列,是一个向量: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 
访问数据框的第二个元素,此时把数据框当作列表来看,返回的结果仍是一个数据框。
> d[2]age
1  30
2  35
3  28
> d["age"]age
1  30
2  35
3  28
> class(d[2])
[1] "data.frame" 
数据框-tibble
数据框-tibble
数据框是一个随着R语言前身S语言继承下来的概念,现在已经有一些不足之处,tibble包提供了tibble类,这是数据框的一个改进版本。
Hadley在tibble包中引入了一种tibble数据框,以代替data.frame,并且tidyverse包都是基于tibble数据框的。
创建数据框tibble,注只适应于数据量比较小的情况。
- 若干列向量创建tibble;
 - 按行录入数据的方式创建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() 中数据每行末尾也需要有逗号,最后一行末尾没有逗号。
tibble比数据框好的地方:
- tibble 与数据框的一大区别是在显示时不自动显示所有内容,这样可以避免显示很大的数据框将命令行的所有显示都充满。
 - tibble 在生成或输入时不自动将字符型列转换为因子。
 
数据框内容访问:
双中括号,访问元素的内容;
单中括号,访问数据框子集。
> 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 
总结数据框和列表的访问:
由于数据框是特殊的列表,所以二者可以使用一套访问方法,即
- 单中括号访问子集;
 - 双中括号访问元素内容;
 
参考:
- R语言入门与实践--冯凌秉译
 - Rbook_PKU_李东风
 - R语言编程-张敬信
 
