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

R语言学习笔记5-数据结构-多维数组

R语言学习笔记5-数据结构-多维数组

  • 多维数组(array)介绍
  • 特点和用途
  • 创建多维数组
  • 多维数组的索引和切片
  • 多维数组的运算
  • 获取多维数组的维度和属性
  • 多维数组的合并和拆分
  • 多维数组的逻辑操作
  • 多维数组的转置和重塑
  • 多维数组的元素操作
  • 多维数组的统计函数
  • 多维数组的循环操作
  • 使用reshape2包的melt()和dcast()函数
  • 利用purrr包对多维数组进行函数应用
  • 对多维数组进行条件筛选和替换
  • 多维数组的子集选择
  • 使用data.table包对多维数组进行高效操作
  • 使用tidyverse进行多维数组的处理

多维数组(array)介绍

多维数组是一种用于存储多维数据的数据结构,与矩阵相似但可以具有超过两个维度

特点和用途

1. 多维数据结构:可以是三维、四维甚至更高维度的数据结构,由多个维度的索引组成
2. 统计和科学计算:适用于存储和操作高维数据,例如立方体数据(三维数组)、四维数据集等
3. 元素访问和运算:支持类似于矩阵的索引和运算,但需要指定多个维度

创建多维数组

可使用 array() 函数创建多维数组, 其中dim对应单词dimension,表示纬度

array(data, dim = c(dim1, dim2, ...))

其中 data 是数组的元素,dim 是一个向量,指定数组每个维度的大小

# 创建一个三维数组
arr <- array(1:24, dim = c(2, 3, 4))
print(arr)

输出:

, , 1[,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6, , 2[,1] [,2] [,3]
[1,]    7    9   11
[2,]    8   10   12, , 3[,1] [,2] [,3]
[1,]   13   15   17
[2,]   14   16   18, , 4[,1] [,2] [,3]
[1,]   19   21   23
[2,]   20   22   24

多维数组的索引和切片

与矩阵类似,可以使用索引访问和操作多维数组的元素

# 访问多维数组元素
element <- arr[1, 2, 3]  # 访问第一行,第二列,第三层的元素
print(element)  # 输出 15# 修改多维数组元素
arr[1, 2, 3] <- 100
print(arr[1, 2, 3])  # 输出 100

多维数组的运算

可对多维数组进行类似于矩阵的运算,如加法、乘法等

# 创建两个三维数组
arr1 <- array(1:24, dim = c(2, 3, 4))
arr2 <- array(24:1, dim = c(2, 3, 4))# 加法运算
arr_sum <- arr1 + arr2
print(arr_sum)

获取多维数组的维度和属性

可以使用 dim() 函数获取多维数组的维度信息

# 获取多维数组的维度
arr_dims <- dim(arr1)
print(arr_dims)  # 输出 2 3 4,表示 2 行 3 列 4 层

多维数组的合并和拆分

可使用 abind 包中的函数将多个数组按照指定的维度进行合并,或者使用索引进行拆分

library(abind)# 合并多个数组
arr1 <- array(1:12, dim = c(2, 3, 2))
arr2 <- array(13:24, dim = c(2, 3, 2))
arr_combined <- abind(arr1, arr2, along = 3)
print(arr_combined)# 输出:
# , , 1
# 
#      [,1] [,2] [,3]
# [1,]    1    3    5
# [2,]    2    4    6
# 
# , , 2
# 
#      [,1] [,2] [,3]
# [1,]    7    9   11
# [2,]    8   10   12
# 
# , , 3
# 
#      [,1] [,2] [,3]
# [1,]   13   15   17
# [2,]   14   16   18
# 
# , , 4
# 
#      [,1] [,2] [,3]
# [1,]   19   21   23
# [2,]   20   22   24# 拆分多维数组
arr_split <- arr_combined[, , 1:2]
print(arr_split)

along 参数指定了沿着哪个维度合并数组,也就是说它确定了在合并多个数组时,这些数组如何沿着指定的维度进行对齐和连接,这里 along = 3 意味着 arr1 和 arr2 在第三维度(也就是在层数或深度上)进行合并

多维数组的逻辑操作

可对多维数组的元素进行逻辑判断和条件筛选,获取满足条件的子集

# 逻辑操作
arr1 <- array(1:12, dim = c(2, 3, 2))# 判断大于 5 的元素
arr_above_5 <- arr1[arr1 > 5]
print(arr_above_5)

多维数组的转置和重塑

可使用 aperm() 函数进行多维数组的转置操作,或使用 array_reshape() 函数重新调整数组的维度结构

# 旋转数组
arr_rotated <- aperm(arr1, c(3, 2, 1))  # 交换第1维和第3维
print(arr_rotated)# 翻转数组的某一维
arr_flipped <- arr1[, , 2:1]  # 翻转第3维
print(arr_flipped)# 重塑数组维度
arr_reshaped <- array_reshape(arr1, c(3, 4))
print(arr_reshaped )

多维数组的元素操作

可对多维数组的每个元素应用函数或进行逐元素的数学操作

# 应用函数到每个元素
arr_squared <- arr1 ^ 2# 逐元素加法
arr_sum <- arr1 + 10

多维数组的统计函数

R 提供了多维数组的统计函数,这些函数可对特定维度进行汇总计算,如求和、均值、最大值、最小值等

# 计算每层的均值
mean_per_layer <- apply(arr1, c(1, 2), mean)
print(mean_per_layer)# 计算每列的总和
sum_per_column <- apply(arr1, 2, sum)
print(sum_per_column)

多维数组的循环操作

可使用 for 循环遍历数组的各个维度来进行更复杂的操作

# 计算每个切片的均值
for (i in 1:dim(arr1)[3]) {slice_mean <- mean(arr1[, , i])print(paste("Mean of slice", i, "is", slice_mean))
}

使用reshape2包的melt()和dcast()函数

reshape2 包提供了 melt() 和 dcast() 函数来处理和转换数据结构

library(reshape2)# 将多维数组转换为长格式数据框
melted_arr <- melt(arr1)
print(melted_arr)# 从长格式数据框转换回多维数组
arr_recast <- dcast(melted_arr, Var1 + Var2 ~ Var3, value.var = "value")
print(arr_recast)

利用purrr包对多维数组进行函数应用

purrr 包提供了功能强大的工具来对数组进行复杂的函数操作

library(purrr)# 对每个切片应用函数
apply_fun <- map(arr1, ~mean(.x))  # 计算每个切片的均值
print(apply_fun)

对多维数组进行条件筛选和替换

可对数组进行条件筛选,并根据条件对元素进行修改

# 将小于 5 的元素替换为 0
arr1[arr1 < 5] <- 0
print(arr1)

多维数组的子集选择

可以利用逻辑子集选择对数组进行筛选

# 获取第一个切片中大于 4 的元素
arr_subset <- arr1[ , , 1][arr1[ , , 1] > 4]
print(arr_subset)

使用data.table包对多维数组进行高效操作

data.table 包提供了高效的数据处理能力,可以用于对数组数据的处理和分析

library(data.table)# 将数组转换为 data.table
dt <- as.data.table(arr1, keep.rownames = TRUE)
print(dt)# 使用 data.table 进行操作
dt_summary <- dt[, .(Sum = sum(V1)), by = rn]
print(dt_summary)

使用tidyverse进行多维数组的处理

tidyverse 包提供了强大的数据处理功能,可以用于对数组进行复杂的数据转换操作

library(tidyverse)# 将数组转换为 tibble
arr_tibble <- tibble::as_tibble(arr1, .name_repair = "minimal")
print(arr_tibble)# 使用 dplyr 对 tibble 进行数据操作
arr_summary <- arr_tibble %>%group_by(dim1, dim2) %>%summarize(mean_value = mean(value))
print(arr_summary)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 如何通过JSON-RPC向以太坊链发送签名交易数据?
  • Open3D 点云配准精度评价指标-RMSE
  • 华为机考真题 -- 螺旋数字矩阵
  • “金山-讯飞”杯2024年武汉理工大学程序设计竞赛 A. Mobiusp败走***(思维题-点双连通分量、连通性)
  • 51单片机:电脑通过串口控制LED亮灭(附溢出率和波特率详解)
  • SVN 解决冲突
  • 《算法笔记》总结No.6——贪心
  • Elasticsearch:Node.js ECS 日志记录 - Morgan
  • 【全面介绍语言模型的原理,实战和评估】
  • 使用Python绘制气泡图
  • 共话未来 | 人大金仓即将亮相TDBC 2024可信数据库发展大会
  • linux_进程概念——理解冯诺依曼体系结构
  • C基础day8
  • 微软推出全新的学习网站 Microsoft Learn
  • wifi模组Ai-M62-32S的IO映射和UDP透传测试
  • angular组件开发
  • HTTP中的ETag在移动客户端的应用
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Object.assign方法不能实现深复制
  • PHP 小技巧
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • vue-router的history模式发布配置
  • Webpack 4x 之路 ( 四 )
  • 当SetTimeout遇到了字符串
  • 仿天猫超市收藏抛物线动画工具库
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • NLPIR智能语义技术让大数据挖掘更简单
  • python最赚钱的4个方向,你最心动的是哪个?
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​ArcGIS Pro 如何批量删除字段
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • ​探讨元宇宙和VR虚拟现实之间的区别​
  • (06)金属布线——为半导体注入生命的连接
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (30)数组元素和与数字和的绝对差
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (一)80c52学习之旅-起始篇
  • (转)Linux下编译安装log4cxx
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core + vue 搭建前后端分离的框架
  • .NET Core 2.1路线图
  • .net core控制台应用程序初识
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .Net 代码性能 - (1)
  • .net6Api后台+uniapp导出Excel
  • .NET是什么
  • .NET中winform传递参数至Url并获得返回值或文件
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • /*在DataTable中更新、删除数据*/
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?