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

相关内容

热门资讯

Mysql常用数据类型总结 整形 枚举类型ENUE整形       TINYINT,SMALLINT,MEDIUMINT,IN...
【flink sql】创建表 flink sql创建表语法 CREATE TABLE [IF NOT EXISTS] [catal...
python opencv 保... 👨‍💻个人简介: 深度学习图像领域工作者 dz...
Pytorch深度学习实战3-... 目录1 数据集Dataset2 数据加载DataLoader3 常用预处理方法4 模型处理5 实例&...
自定义类型的超详细讲解ᵎᵎ了解...   目录 1.结构体的声明 1.1基础知识 1.2结构体的声明 1.3结构体的特殊声明  1.4结构...
Docker等容器技术如何与移... 移动应用程序的开发面临着很多挑战,包括开发环境的设置、测试的困难、部署的复杂性等。由于...
【微服务】—— Nacos安装... 文章目录1. Windows安装1.1 下载安装包1.2 解压1.3 端口配置1.4 启动1.5 访...
【OpenGL】 为了理解这个函数我们需要先学习一些OpenGL的内容 OpenGL可视化 https://g...
hjr-详细说一下Redis集... Redis作用 缓存 一般我们用Redis做缓存,热点数据 击穿:访问到...
【蓝桥杯】 C++ 数字三角形... 文章目录题目描述输入描述输出描述实现代码解题思路注意点知识点 题目描述 上图给出了一个数字三角形。从...
VR全景展会丨探索未来,重塑现... 随着科技的不断发展,虚拟现实(VR)技术逐渐成为一个重要的...
C++数据类型 目录 C++基础数据类型 指针 指针类型 指针赋值 引用 参考:《深...
超实用!!! 三分钟将你的项目... 文章目录前言一、在项目中新增配置二、配置github page setting?三、如...
数据结构---队列 专栏:数据结构 个人主页:HaiFan. 专栏简介:这里是...
数字操作方法 系列文章目录 前端系列文章——传送门 JavaScript系列文章——传送门 文章目录系列文章目录...
Cartesi 2023 年 ... 查看 Cartesi Machine、Cartesi Rollups 和 Noether 的更新正在...
JavaWeb——jsp概述入... JSP定义:  在如下一个jsp文件里面有如下的代码  <%@ page content...
一切喜怒哀乐都来自于你的认知 01 有个学子,准备出国,父母请来清华的教授宁向东。请问教授࿱...
JAVA并发编程——synch... 引言         Java语言为了解决并发编程中存在的原子性、可见性和有序性问题,...
git学习----3.21 未... 文章目录前言Git :一个分布式版本控制工具目标一、概述1.1 开发中的实际场景1.2...
Qt优秀开源项目之十七:QtP... QtPromise是Promises/A+规范的Qt/C++实现。该规范的译...
【前端八股文】JavaScri... 文章目录Set概念与arr的比较属性和方法并集、交集、差集Map概念属性和方法String用索引值和...
海康硬盘录像机接入RTSP/o... EasyNVR安防视频云服务平台可支持设备通过RTSP/Onvif协议接入平台,能提供...
在混合劳动力时代如何避免网络安... 在混合劳动力时代如何避免安全网络风险 三年多来,混合工作一直是工作生活中不可或缺的一...
2023还不懂Jmeter接口... 这里介绍的Jmeter接口测试的的实战,如果文章内容没遇看懂的话,我这边...
基于4G/5G弱网聚合的多链路... 基于4G/5G多卡聚合(弱网聚合)的智能融合通信设备技术亮点 增强带宽提供可靠连接 通过将多个有线和...
如何使用Synplify综合v... 文章目录使用Synplify综合的好处synplify的教程方法1(无效)...
2023年全国最新高校辅导员精... 百分百题库提供高校辅导员考试试题、辅导员考试预测题、高校辅导员考试真题、辅导员证考试题库等ÿ...
2022年18个值得期待的Le... 有数百个独特的LearnDash附加组件,您可能很难选择您的LearnDash LMS...
【java基础】Stream流... 文章目录基本介绍流的创建流的各种常见操作forEach方法filter方法map方法peek方法fl...