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

相关内容

热门资讯

玛雅人的五大预言 玛雅人预言2... 曾经玛雅人预言2012年是世界末日,但当时好像没有发生什么。没想到10年后的2022年,疫情,战争,...
cad打印线条粗细设置 cad... 004-线型(下)打印样式设置和线型文件使用一、线宽设置方法制图规范里边的线宽要求,我们已经定义好,...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
荼蘼什么意思 岁月缱绻葳蕤生香... 感谢作者【辰夕】的原创独家授权分享编辑整理:【多肉植物百科】百科君坐标:云南 曲靖春而至,季节流转,...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...