= list(1,c(TRUE,FALSE),c("a","b","C"))
l0 l0
[[1]]
[1] 1
[[2]]
[1] TRUE FALSE
[[3]]
[1] "a" "b" "C"
hcl
May 20, 2022
列表,可以包含不同类型的对象,甚至可以包括其他列表。
列表的最大好处是,他能够将多个不同类型的对象打包到一起,使得可以根据位置和名字访问它们。
常用场景:将函数的多个返回值打包到一起作为一个对象返回。
$A
[1] 1
$B
[1] TRUE FALSE
$C
[1] "a" "b" "C"
[[ ]] 始终是提取一个元素的内容,列表某一个成分的内容(下一级元
素)
[ ]始终是提取子集,列表的子集是包含若干成分的子列表(仍是同类
型对象)
最常用的方法是用 $,通过成分名字来提取该成分下的内容:
用 [[n]] 来提取列表第 n 个成分的内容, n 也可以换成成分的名字:
用 [ ],可以取出列表中的一些成分,作为一个新的(子)列表。
[ ]中可以用字符向量表示成分名字,用数值向量表示成分位置,或用逻
辑向量指定是否选择,来取出列表成分
本质上讲,数据框就是一个列表,它的每个成分都是一个向量,并且长度相同,以表格的形式展现。总之, 数据框是由列向量组成、有着矩阵形式的列表 。
数据框与最常见的数据表是一致的:每一列代表一个变量属性,每一行代表一条样本数据 。
用tibble()根据若干列向量创建tibble:
── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
✔ ggplot2 3.3.6 ✔ purrr 0.3.4
✔ tibble 3.1.8 ✔ dplyr 1.0.10
✔ tidyr 1.2.1 ✔ stringr 1.4.1
✔ readr 2.1.2 ✔ forcats 0.5.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
persons = tibble(
Name = c("Ken", "Ashley", "Jennifer"),
Gender = c("Male", "Female", "Female"),
Age = c(24, 25, 23),
Major = c("Finance", "Statistics", "Computer Science")
)
persons
# A tibble: 3 × 4
Name Gender Age Major
<chr> <chr> <dbl> <chr>
1 Ken Male 24 Finance
2 Ashley Female 25 Statistics
3 Jennifer Female 23 Computer Science
用as_tibble()将data.frame,matrix各成分等长度的list转换为tibble。
对数据框的各列重命名:
数据框是由列向量组成、有着矩阵形式的列表,所以可以用两种操作方式来访问数据框的元素和子集。
(1)以列表方式提取数据框的元素、子集
用$按列名来提取某一列的值,或者用[[ ]]按照位置或列名提取
用[ ]提取数据框的一列或多列,得到子数据框,其内可以是数值向量(列位置)、字符向量(列名)、逻辑向量(是否选择各列)。
# A tibble: 4 × 1
id
<int>
1 1
2 2
3 3
4 4
# A tibble: 4 × 2
id x
<int> <dbl>
1 1 0
2 2 2
3 3 1
4 4 -1
(2)以矩阵方式提取数据框的元素、子集
以列表形式操作并不支持行选择。以矩阵方式操作更加灵活。同时支持选择行和列。即用 [i, j] 指定行或列来提取数据框子集, [ , ]
其内可以是数值向量、字符向量或者逻辑向量 。
# A tibble: 4 × 1
x
<dbl>
1 0
2 2
3 1
4 -1
# A tibble: 4 × 2
x y
<dbl> <dbl>
1 0 0.5
2 2 0.2
3 1 0.2
4 -1 0.5
给数据框赋值,就是选择要赋值的位置,再准备好同样大小且格式匹配的数据,赋值给那些位置即可,所以同样有列表方式和矩阵方式。
(1)以列表方式给数据框赋值
# A tibble: 4 × 4
id x y z
<int> <dbl> <dbl> <dbl>
1 1 0 0.6 0.6
2 2 2 0.3 2.3
3 3 1 0.2 1.2
4 4 -1 0.4 -0.6
# A tibble: 4 × 4
id x y z
<int> <dbl> <dbl> <chr>
1 1 0 0.6 0.6
2 2 2 0.3 2.3
3 3 1 0.2 1.2
4 4 -1 0.4 -0.6
用[]可以对数据框的1列或多列进行赋值
(2)以矩阵方式给数据框赋值
以列表方式对数据框进行赋值时,也是只能访问列。若需要更加灵活地进行赋值操作,可以以矩阵方式进行。
str()或glimpse()作用在R对象上,显示该对象的结果:
tibble [3 × 4] (S3: tbl_df/tbl/data.frame)
$ Name : chr [1:3] "Ken" "Ashley" "Jennifer"
$ Gender: chr [1:3] "Male" "Female" "Female"
$ Age : num [1:3] 24 25 23
$ Major : chr [1:3] "Finance" "Statistics" "Computer Science"
summary()作用在数据框/列表上,将生成各列/成分的汇总信息
Name Gender Age Major
Length:3 Length:3 Min. :23.0 Length:3
Class :character Class :character 1st Qu.:23.5 Class :character
Mode :character Mode :character Median :24.0 Mode :character
Mean :24.0
3rd Qu.:24.5
Max. :25.0
将数据框按行或列进行合并,可以用dplyr包提供的bind_rows()、bind_cols()替代rbind()、cbind()。