当前位置: 首页 > news >正文

R 语言学习教程,从入门到精通,R 数据框(14)

1、R 数据框

数据框(Data frame)可以理解成我们常说的"表格"。
数据框是 R 语言的数据结构,是特殊的二维列表。
数据框每一列都有一个唯一的列名,长度都是相等的,同一列的数据类型需要一致,不同列的数据类型可以不一样。
R 语言数据框使用 data.frame() 函数来创建,语法格式如下:

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

…: 列向量,可以是任何类型(字符型、数值型、逻辑型),一般以 tag = value 的形式表示,也可以是 value。
row.names: 行名,默认为 NULL,可以设置为单个数字、字符串或字符串和数字的向量。
check.rows: 检测行的名称和长度是否一致。
check.names: 检测数据框的变量名是否合法。
fix.empty.names: 设置未命名的参数是否自动设置名字。
stringsAsFactors: 布尔值,字符是否转换为因子,factory-fresh 的默认值是 TRUE,可以通过设置选项(stringsAsFactors=FALSE)来修改。
以下创建一个简单的数据框,包含姓名、工号、月薪:

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

执行以上代码输出结果为:

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

数据框的数据结构可以通过 str() 函数来展示:

table = data.frame(姓名 = c("张三", "李四"),工号 = c("001","002"),月薪 = c(1000, 2000)
)
# 获取数据结构
str(table)

执行以上代码输出结果为:

'data.frame':   2 obs. of  3 variables:$ 姓名: chr  "张三" "李四"$ 工号: chr  "001" "002"$ 月薪: num  1000 2000

summary() 可以显示数据框的概要信息:

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

执行以上代码输出结果为:

姓名               工号                月薪     
Length:2           Length:2           Min.   :1000  
Class :character   Class :character   1st Qu.:1250  
Mode  :character   Mode  :character   Median :1500  Mean   :1500  3rd Qu.:1750  Max.   :2000

我们也可以提取指定的列:

table = data.frame(姓名 = c("张三", "李四"),工号 = c("001","002"),月薪 = c(1000, 2000)
)
# 提取指定的列
result <- data.frame(table$姓名,table$月薪)
print(result)

执行以上代码输出结果为:

table.姓名 table.月薪
1       张三       1000
2       李四       2000

以下形式显示前面两行:

table = data.frame(姓名 = c("张三", "李四","王五"),工号 = c("001","002","003"),月薪 = c(1000, 2000,3000)
)
print(table)
# 提取前面两行
print("---输出前面两行----")
result <- table[1:2,]
print(result)

执行以上代码输出结果为:

姓名 工号 月薪
1 张三  001 1000
2 李四  002 2000
3 王五  003 3000
[1] "---输出前面两行----"姓名 工号 月薪
1 张三  001 1000
2 李四  002 2000

我们可以通过类似坐标的形式读取指定行的某一列的数据,以下我们读取第 2 、3 行的第 1 、2 列数据:

table = data.frame(姓名 = c("张三", "李四","王五"),工号 = c("001","002","003"),月薪 = c(1000, 2000,3000)
)
# 读取第 2 、3 行的第 1 、2 列数据:
result <- table[c(2,3),c(1,2)]
print(result)

执行以上代码输出结果为:

姓名 工号
2 李四  002
3 王五  003

扩展数据框
我们可以对已有的数据框进行扩展,以下示例我们添加部门列:

table = data.frame(姓名 = c("张三", "李四","王五"),工号 = c("001","002","003"),月薪 = c(1000, 2000,3000)
)
# 添加部门列
table$部门 <- c("运营","技术","编辑")print(table)

执行以上代码输出结果为:

姓名 工号 月薪 部门
1 张三  001 1000 运营
2 李四  002 2000 技术
3 王五  003 3000 编辑

我们可以使用 cbind() 函数将多个向量合成一个数据框:

# 创建向量
sites <- c("Google","Nhooo","Taobao")
likes <- c(222,111,123)
url <- c("www.google.com","www.cainiaojc.com","www.taobao.com")# 将向量组合成数据框
addresses <- cbind(sites,likes,url)# 查看数据框
print(addresses)

执行以上代码输出结果为:

    sites    likes url             
[1,] "Google" "222" "www.google.com"
[2,] "Nhooo" "111" "www.cainiaojc.com"
[3,] "Taobao" "123" "www.taobao.com"

如果要对两个数据框进行合并可以使用 rbind() 函数:

table = data.frame(姓名 = c("张三", "李四","王五"),工号 = c("001","002","003"),月薪 = c(1000, 2000,3000)
)
newtable = data.frame(姓名 = c("小明", "小白"),工号 = c("101","102"),月薪 = c(5000, 7000)
)
# 合并两个数据框
result <- rbind(table,newtable)
print(result)

执行以上代码输出结果为:

姓名 工号 月薪
1 张三  001 1000
2 李四  002 2000
3 王五  003 3000
4 小明  101 5000
5 小白  102 7000

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 使用html+css+js实现完整的登录注册页面
  • Python酷库之旅-第三方库Pandas(082)
  • 数据集的简单制作和使用
  • TS中什么是泛型
  • MySQL与PostgreSQL语法区别
  • 小山菌_代码随想录算法训练营第六十二天|dijkstra(堆优化版)精讲 、Bellman_ford 算法精讲
  • 重新连接 到 时出错 Microsoft Windows Network:本地设备名已在使用中
  • Qt:线程
  • LeetCode 热题100-2
  • Unity引擎加密方案解析
  • Linux装ifort环境
  • el-select选项框样式修改
  • 【cv::triangulatePoints】其中的投射矩阵P(3x4)是怎么得到的?(内外参数K[R|t]到最终矩阵的变换过程)
  • 【ESP32】在原理图中为什么要在VCC处加几个电容
  • 写给非机器学习人员的 embedding 入门
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • FineReport中如何实现自动滚屏效果
  • JavaScript设计模式与开发实践系列之策略模式
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Less 日常用法
  • Linux快速复制或删除大量小文件
  • Otto开发初探——微服务依赖管理新利器
  • Python实现BT种子转化为磁力链接【实战】
  • Sequelize 中文文档 v4 - Getting started - 入门
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • Yeoman_Bower_Grunt
  • 大型网站性能监测、分析与优化常见问题QA
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • ------- 计算机网络基础
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 如何设计一个微型分布式架构?
  • 入门级的git使用指北
  • 少走弯路,给Java 1~5 年程序员的建议
  • 携程小程序初体验
  • 一道面试题引发的“血案”
  • 异步
  • 智能合约Solidity教程-事件和日志(一)
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 2017年360最后一道编程题
  • AI算硅基生命吗,为什么?
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • #pragma multi_compile #pragma shader_feature
  • #QT(串口助手-界面)
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • #微信小程序:微信小程序常见的配置传旨
  • ${ }的特别功能
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (3)选择元素——(17)练习(Exercises)
  • (55)MOS管专题--->(10)MOS管的封装
  • (70min)字节暑假实习二面(已挂)