美文网首页程序员
学习R记录 <- 基础4(列表与数据框)

学习R记录 <- 基础4(列表与数据框)

作者: limbo1996 | 来源:发表于2019-03-25 19:35 被阅读7次

列表与数据框
到目前为止,向量、数组、矩阵这些前面提到的所包含的元素类型都是相同的,而列表数据框允许把不同的数据类型合并到单一变量中。

1.列表

1.1 创建列表

创建列表使用list函数,列表中的元素类型不限,可以是向量、矩阵,甚至还可以是函数。

> a <- list(
+   c(1,2,3,4,5),
+   month.abb,
+   matrix(c(3, -8, 1, -3), nrow = 2),
+   asin
+ )
> a
[[1]]
[1] 1 2 3 4 5

[[2]]
 [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"

[[3]]
     [,1] [,2]
[1,]    3    1
[2,]   -8   -3

[[4]]
function (x)  .Primitive("asin")

同样的,你也可以给列表命名。

> names(a) <- c('catalan', 'months', 'involutary', 'arcsin') 
> a
$catalan
[1] 1 2 3 4 5

$months
 [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"

$involutary
     [,1] [,2]
[1,]    3    1
[2,]   -8   -3

$arcsin
function (x)  .Primitive("asin")

同样你也可以把此列表当作另一个列表的元素。

1.2 原子变量和递归变量

这里有一个概念:因为列表有把其他列表包含在内的能力,所以被称为递归变量, 与之相对的向量、矩阵、数组被称为原子变量

1.3 索引列表

我们可以使用[]、正负下标数或者元素名称,逻辑索引来访问列表元素,
值得注意的是,索引操作的结果产生了另一个列表, 所以当你要访问列表元素的内容,需要使用[[]]双方括号

> a
[[1]]
[1] 1 2 3 4 5

[[2]]
[1]  6  7  8  9 10

[[3]]
[1] "dsa"

> a[1]
[[1]]
[1] 1 2 3 4 5

> a[[1]]
[1] 1 2 3 4 5

使用函数is.list会更直观:

> a[[1]]
[1] 1 2 3 4 5
> is.list(a)
[1] TRUE
> is.list(a[1])
[1] TRUE
> is.list(a[[1]])
[1] FALSE

当然对于已经命名的元素可以使用$来访问其值。这就有点类似于shell了。

1.4 向量与列表的转换

> b <- c(1,2,3,4)
> c <- as.list(b)
> b
[1] 1 2 3 4
> c
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

[[4]]
[1] 4

> is.list(c)
[1] TRUE

如上,使用函数as.list可以完成转化。
当然列表也可以转化成向量

  • 当列表中元素都是标量时,使用函数as.numeric等可以将列表转换为不同类型的向量。
  • 当列表中的元素包含非标量, 那这就是一个问题了,可以先使用函数unlist将其转化为向量

1.5NULL值

NULL值是一个特殊值,它表示的是一个空的变量,有时候你创建一个列表时,有的元素必须存在但是目前还没有赋值,就可以用NULL来表示。
需要区分的是NULL和NA它们有很大区别,其中一个区别就是NULL的长度为0——NULL不会占用任何空间;而NA是一个标量,长度为1

> length(NULL)
[1] 0
> length(NA)
[1] 1

2. 数据框

数据框十分常见,它就类似于一个电子表格。

2.1 创建数据框

使用函数data.frame可以创建数据框:

> c <- data.frame(x = c(1:5), y = rnorm(5), z = runif(5) > 0.5)
> c
  x          y     z
1 1 -0.8818198  TRUE
2 2  1.1158819  TRUE
3 3  0.4585993  TRUE
4 4  0.8917424 FALSE
5 5  0.7377649  TRUE

在数据框中每一列的数据类型必须相同,但是列与列之间类型可以不同。
每一行的名字可以使用参数row.names来命名

> row.names(c) <- c('A', 'B', 'C', 'D', 'E')
> c
  x           y     z
A 1 -1.00220443 FALSE
B 2 -0.81289684  TRUE
C 3 -0.79172877 FALSE
D 4  0.19666573  TRUE
E 5 -0.04511619 FALSE

其实几乎所有的矩阵的函数都可以用在数据框上

> rownames(c)
[1] "A" "B" "C" "D" "E"
> colnames(c)
[1] "x" "y" "z"
> dimnames(c)
[[1]]
[1] "A" "B" "C" "D" "E"

[[2]]
[1] "x" "y" "z"

> nrow(c)
[1] 5
> ncol(c)
[1] 3
> dim(c)
[1] 5 3
> length(c)
[1] 3
> names(c)
[1] "x" "y" "z"

有点不同的是函数length返回和函数ncol一样的值即列数,names函数返回的也是列名。

相关文章

  • 学习R记录 <- 基础4(列表与数据框)

    列表与数据框到目前为止,向量、数组、矩阵这些前面提到的所包含的元素类型都是相同的,而列表和数据框允许把不同的数据类...

  • R语言基础之数据结构

    基础数据结构 R语言中主要有向量(vector),矩阵(matrix),列表(list),数据框(data fra...

  • R语言数据结构-向量

    R语言数据结构主要有以下四种: 1.向量2.数据框3.矩阵4.列表 最好理解的是数据框,数据框约等于“表格” 第一...

  • R语言笔记Day1(二 数据框、矩阵和列表)

    数据框、矩阵和列表 1.数据框 1.1 来源 (1)在R中新建(2)由已有数据转换或处理得到(3)从文件中读取(4...

  • 学习小组Day5笔记--小明

    R语言数据结构 数据类型 -向量-矩阵-数组-数据框-列表 知识点,与python相比 1.注意赋值方式2.r中同...

  • 初识R语言—数据框的操作

    R的数据结构 1、向量vector2、矩阵matrix3、数组array4、数据框 dataframe5、列表 数...

  • Day5—小夏

    学习内容 R语言的向量和数据框(列表) 思维导图 课后问题 save(X,file="test.RData")这句...

  • R语言数据结构-数据框&矩阵&列表

    R语言数据结构主要有以下四种: 1.向量2.数据框3.矩阵4.列表 四种数据结构,重点掌握向量和数据框 Vecto...

  • R基础与机器学习初探

    一.R语言基础 1.1 R的数据结构 向量、数据框、矩阵属于最常用的R数据结构,关于基础这里不多讲,简单概括一下 ...

  • R 学习笔记(4) -- 数据框

    数据框是列表的一种特例,可以看成是每个组件都是长度相同的向量的列表。数据框有类似列表的特性,也有类似矩阵的特性。 ...

网友评论

    本文标题:学习R记录 <- 基础4(列表与数据框)

    本文链接:https://www.haomeiwen.com/subject/ggmemqtx.html