列表
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
总结数据框和列表的访问:
由于数据框是特殊的列表,所以二者可以使用一套访问方法,即文章来源:https://www.toymoban.com/news/detail-607623.html
- 单中括号访问子集;
- 双中括号访问元素内容;
参考:文章来源地址https://www.toymoban.com/news/detail-607623.html
- R语言入门与实践--冯凌秉译
- Rbook_PKU_李东风
- R语言编程-张敬信
到了这里,关于R语言学习笔记--列表list、数据框的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!