R语言基础教程4:列表和数据框
创始人
2025-05-31 01:44:16

文章目录

    • 列表
    • 数据帧
    • 表头

R语言系列:1 编程基础💎2 循环语句💎3 向量、矩阵和数组

前面介绍了向量、矩阵和数组这三种数据结构,它们在数学计算方面便捷而强大。接下来介绍两种更有R风格的数据结构,即列表和数据表,这五种数据类型的差异如下
在这里插入图片描述

列表

从外观上看,列表和向量是极为相似的,但二者的内在并不同,向量中的内容必须有着相同的数据类型,但列表并不需要。为了说明这种区别,可以在命令行中分别创建两个变量

> vec = c(1,'2')
> lst = list(1,'2')
> print(lst)
[[1]]
[1] 1[[2]]
[1] "2"
> print(vec)
[1] "1" "2"

也就是说,向量自动将1转化为了"1",从而和"2"保持相同的数据类型,但list并不需要,而且可以更加方便地进行添加、删除元素等操作,如下例所示

> lst[3] <- "3"
> print(lst)
[[1]]
[1] 1[[2]]
[1] "2"[[3]]
[1] "3"> lst[3] <- NULL
> lst
[[1]]
[1] 1[[2]]
[1] "2"

那么, 代价是什么?

代价就是列表没法像向量那样自由地进行计算。

数据帧

数据帧是通过data.frame()创建的数据结构,有的时候也称之为数据框,简单地理解就是二维列表,其创建函数为

data.frame(vecs, row.names = NULL, check.rows = FALSE,check.names = TRUE, fix.empty.names = TRUE,stringsAsFactors = default.stringsAsFactors())

其中,vecs是多组列向量,是创建数据框必不可少的要素,

  • row.names 为行名
  • check.rowsTRUE时,会检测行的名称和长度是否一致
  • check.namesTRUE时,检测数据框的变量名是否合法
  • fix.empty.namesTRUE时,未命名的参数自动设置名
  • stringsAsFactorsTRUE时,字符自动转换为因子

示例如下

table = data.frame(姓名 = c("张三", "李四"),工号 = c("001","002"),月薪 = c(1000, 2000))
print(table)

输出结果为

  姓名 工号 月薪
1 张三  001 1000
2 李四  002 2000

其索引方式比较灵活,既可以通过行号、列号,也可以直接通过列名

> print(table[1])姓名
1 张三
2 李四
> print(table["姓名"])姓名
1 张三
2 李四
> print(table[,1])
[1] "张三" "李四"

通过符号$可以更加便捷地根据列名来提取某一列,以及增添或删除某一列,其逻辑与列表相同

> table$姓名
[1] "张三" "李四"
> table$姓名 <- NULL    # 
> table工号 月薪
1  001 1000
2  002 2000
> table$姓名 <- c("张三", "李四")
> table工号 月薪 姓名
1  001 1000 张三
2  002 2000 李四

表头

数据帧可以通过表头来索引,这一点列表、向量等数据结构同样可以做到。其中,列表通过names函数来实现

lst <- list(c("hello","R","language"), c(1,2,3,4,5,6),list("hello",3.14))names(lst) <- c("Sites", "Numbers", "Lists")

然后就可以使用$来索引了

> lst$Sites
[1] "hello"    "R"        "language"

向量也可以通过names来进行命名,但不支持$索引

> vec <- c(1,2,3)
> names(vec) <- c("a","b","c")
> vec
a b c 
1 2 3 

矩阵可通过colnamesrownames分别进行行和列的命名

> m1 = matrix(1:12, 3, 4)
> rownames(m1)<-c("r1","r2","r3")
> colnames(m1)<-c("c1","c2","c3","c4")
> m1c1 c2 c3 c4
r1  1  4  7 10
r2  2  5  8 11
r3  3  6  9 12

相关内容

热门资讯

吸猫伐是什么意思 吸猫是吸哪里 作为铲屎官,相信对于网络上流行的各种与猫咪相关的梗都是了然于心的,什么吸猫啦,撸猫啦,云养猫啦……等...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
重庆属于哪个省份的 重庆在中国... 重庆有多大,大到超出我们的想象,重庆作为我国4个直辖市之一,印象里应该跟京津沪面积差不多,可事实上却...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...