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

【R语言速通】1.数据类型

文章目录

    • 0. 变量名
    • 1.基本数据类型
      • 1.1 数值型
      • 1.2 整型
      • 1.3 复数型
      • 1.4 逻辑型
      • 1.5 字符型
    • 2.复合数据类型
      • 2.1 向量
        • 向量操作
        • 向量的常用函数
      • 2.2 矩阵
        • 矩阵操作
        • 矩阵的常用函数
      • 2.3 数组
        • 数组的操作
          • 数据的运算
          • 数组的访问
          • 数组的维度操作
        • 数组的常用函数
      • 2.4 数据框
        • 数据框操作
        • 数据框的常用函数
      • 2.5 列表
        • 列表的操作
        • 列表的常用函数

0. 变量名

R 语言的有效的变量名称由字母,数字以及点号 . 或下划线 _ 组成

  1. 不能以数字和下划线 _开头
  2. . 号开头后面不能跟着数字
  3. 区分大小写
  4. 不要使用保留名

1.基本数据类型

1.1 数值型

# 一般数值
x <- 10       # 整数(实际存储为浮点数)
y <- 3.14     # 浮点数
# 科学计数(e,E都可以使用)
large_num <- 2.5e6    # 等于 2.5 * 10^6,表示2500000
small_num <- 3.1E-4   # 等于 3.1 * 10^-4,表示0.00031

1.2 整型

和数值型整数的区别就是,整型占往往用的内存更少(4字节,数值型是8字节)

x <- 5L  
y <- -6L

1.3 复数型

# 使用 complex() 函数创建复数
z1 <- complex(real = 3, imaginary = 4) 
# 使用 1i 表示虚数单位
z2 <- 2 + 3i  # 创建复数 2 + 3i

1.4 逻辑型

要大写

x <- TRUE
y <- FALSE

1.5 字符型

text1 <- "Hello, World!"
text2 <- 'R语言字符型'

2.复合数据类型

在这里插入图片描述

2.1 向量

向量是最基本的复合数据类型(一维),向量中的所有元素必须是相同的数据类型,可以是以下几种

# 数字型向量(Numeric)
numeric_vector <- c(1.5, 2.5, 3.5, 4.5, 5.5)# 字符型向量(Character)
character_vector <- c("a", "b", "c", "d", "e")# 逻辑型向量(Logical)
logical_vector <- c(TRUE, FALSE, TRUE)# 整数型向量(Integer)
integer_vector <- c(1L, 2L, 3L, 4L, 5L)# 复杂型向量(Complex)
complex_vector <- c(1+2i, 3-4i, 5+6i, 7-8i, 9+10i)

可以使用typeof()class()函数来查看向量的类型:

typeof(numeric_vector)  # 返回 "double"
class(character_vector)  # 返回 "character"
向量操作

元素访问:可以通过索引访问向量的元素(索引从1开始

numeric_vector[1]  # 返回 1.5

向量运算:可以对向量进行数学运算,这些运算会逐元素执行。

numeric_vector + 2  # 每个元素加2,结果为 c(3.5, 4.5, 5.5, 6.5, 7.5)

逻辑操作:可以对逻辑向量进行与(&)、或(|)操作。

logical_vector & c(TRUE, TRUE, FALSE)  # 结果为 c(TRUE, FALSE, FALSE)

如果长的对象长度是短的对象长度的整倍数,R会将较短的向量自动扩展(重复)以匹配较长的向量。这种特性称为“回收规则”(recycling rule)。

向量的常用函数

length():返回向量的长度。

sum():计算向量的所有元素之和(适用于数值向量)。

mean():计算向量的平均值(适用于数值向量)。

sort():对向量进行排序。

sort(x, decreasing = FALSE, na.last = TRUE)

  • x:要排序的向量。
  • decreasing:逻辑值,默认为 FALSE,表示升序排列;如果为 TRUE,则表示降序排列。
  • na.last:控制 NA 值的位置,默认为 TRUE,表示将 NA 值放在最后;如果为 FALSE,则将 NA 值放在最前面;如果为 NA,则去除所有 NA 值。

unique():返回向量中的唯一值,即去重复,类似python中的set作用

2.2 矩阵

矩阵是一个二维的数据结构,它是一个由行和列组成的元素集合,所有元素的类型必须相同。

mat <- matrix(data, nrow=number_of_rows, ncol=number_of_columns, byrow=logical_value)

data: 用于填充矩阵的数据。

nrow: 矩阵的行数。

ncol: 矩阵的列数。

byrow: 是否按行填充(默认为按列填充)

# 创建一个2x3的矩阵,按列填充
mat <- matrix(1:6, nrow = 2, ncol = 3)
print(mat)
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
矩阵操作

矩阵访问:使用方括号[]来访问矩阵中的元素。格式为matrix[row, col],其中row表示行,col表示列。

mat[1, 2]  # 访问第一行第二列的元素
mat[1, ] # 选择第一行
mat[, 2] # 选择第二列
mat[1:2, ] # 子矩阵提取 

访问的同时也可以修改:matrix[row, col] <- new_value

行列绑定:

  • rbind(): 按行绑定,将多个矩阵或向量合并为一个矩阵。
  • cbind(): 按列绑定,将多个矩阵或向量合并为一个矩阵。
# 创建两个矩阵
mat1 <- matrix(1:6, nrow = 2)
mat2 <- matrix(7:12, nrow = 2)# 按行绑定
mat_rbind <- rbind(mat1, mat2)
print(mat_rbind)# 按列绑定
mat_cbind <- cbind(mat1, mat2)
print(mat_cbind)

矩阵运算

# 创建两个矩阵
mat1 <- matrix(1:4, nrow = 2)
mat2 <- matrix(5:8, nrow = 2)# 矩阵加法
mat_add <- mat1 + mat2
print(mat_add)# 矩阵减法
mat_sub <- mat1 - mat2
print(mat_sub)# 逐元素乘法
mat_mult <- mat1 * mat2
print(mat_mult)# 逐元素除法
mat_div <- mat1 / mat2
print(mat_div)# 矩阵乘法(线性代数)
mat_product <- mat1 %*% mat2
print(mat_product)
矩阵的常用函数

矩阵转置:矩阵的转置将行变为列,列变为行。

# 矩阵转置
mat <- matrix(1:6, nrow = 2)
transposed_mat <- t(mat)
print(transposed_mat)

求逆矩阵solve()函数用于求解矩阵的逆矩阵,适用于方阵(行数和列数相等)。

# 求逆矩阵
square_mat <- matrix(c(1, 2, 3, 4), nrow = 2)
inverse_mat <- solve(square_mat)
print(inverse_mat)

矩阵的行列式det()函数计算方阵的行列式。

# 计算行列式
determinant <- det(square_mat)
print(determinant)

矩阵的秩qr()函数可以用来计算矩阵的秩。

# 矩阵的秩
rank_mat <- qr(square_mat)$rank
print(rank_mat)

特征值和特征向量eigen()函数计算方阵的特征值和特征向量)。

# 计算特征值和特征向量
eigen_result <- eigen(square_mat)
print(eigen_result$values)    # 特征值
print(eigen_result$vectors)   # 特征向量

2.3 数组

数组是用于存储相同数据类型的多维数据结构。数组与向量类似,但它可以有多个维度,比如二维数组(矩阵)或三维及更高维的数组。

array(data = NA, dim = length(data), dimnames = NULL)

ata:要填充数组的元素(通常是一个向量)。

dim:数组的维度。可以是一个向量,表示每个维度的大小。

dimnames:数组中每个维度的名称(可选)。

data <- 1:18
dim_names <- list(c("Row1", "Row2", "Row3"), c("Col1", "Col2", "Col3"), c("Matrix1", "Matrix2"))
my_array <- array(data, dim = c(3, 3, 2), dimnames = dim_names)
print(my_array)
, , Matrix1Col1 Col2 Col3
Row1    1    4    7
Row2    2    5    8
Row3    3    6    9, , Matrix2Col1 Col2 Col3
Row1   10   13   16
Row2   11   14   17
Row3   12   15   18
数组的操作
数据的运算

与之前的类似,长的对象长度是短的对象长度的整倍数,R会将较短的向量自动扩展(重复)以匹配较长的向量。

# 创建两个3x3x2的数组
array1 <- array(1:18, dim = c(3, 3, 2))
array2 <- array(18:1, dim = c(3, 3, 2))# 加法
sum_array <- array1 + array2# 减法
diff_array <- array1 - array2# 乘法
prod_array <- array1 * array2# 除法
div_array <- array1 / array2# 与标量的运算
scalar_add <- array1 + 5
数组的访问

单个元素的访问:

element <- array1[2, 3, 1]

选择子数组:

sub_array <- array1[,,2]
数组的维度操作

dim()函数:获取或设置数组的维度。

dim(array1) # 获取数组的维度
dim(array1) <- c(9, 2) # 修改数组的维度

dimnames()函数:获取或设置数组的维度名称。

dimnames(array_named) # 获取维度名称
dimnames(array1) <- list(c("A", "B", "C"), c("X", "Y", "Z"), c("M1", "M2")) # 设置维度名称
数组的常用函数

apply()函数apply()函数可以沿数组的任一维度应用函数(如求和、平均值等):

apply(X, MARGIN, FUN, ...)
# 创建一个3x3x2的数组
array1 <- array(1:18, dim = c(3, 3, 2))# 沿第一个维度求和
sum_result <- apply(array1, 1, sum)
print(sum_result)# 沿第二个维度计算平均值
mean_result <- apply(array1, 2, mean)
print(mean_result)

2.4 数据框

数据框是一种用于存储表格数据的结构,它的每一列可以包含不同的数据类型(如数值、字符、因子等)。

df <- data.frame(Name = c("Alice", "Bob", "Charlie"),Age = c(25, 30, 35),Salary = c(50000, 55000, 60000)
)
数据框操作

查看数据框结构

str(df)
'data.frame':	3 obs. of  3 variables:$ Name  : chr  "Alice" "Bob" "Charlie"$ Age   : num  25 30 35$ Salary: num  50000 55000 60000

访问数据框中的列

df$Name  # 访问 Name 列, 返回一个向量
df[["Name"]]  # 访问 Name 列, 返回一个向量
df["Name"]  # 访问 Name 列, 返回一个数据框
df[1]  # 访问第 1 列,结果是一个数据框

子集操作

df[1:2, ]  # 选择前两行
df[, 1:2]  # 选择前两列
df[df$Age > 28, ]  # 筛选 Age 大于 28 的行

添加新列

df$Department <- c("HR", "IT", "Finance")  # 使用 $ 符号
df["Experience"] <- c(2, 5, 7)  # 使用 [] 操作符

删除列

df$Department <- NULL  # 删除 Department 列

合并数据框

# 创建另一个数据框
df2 <- data.frame(Name = c("David", "Eva"),Age = c(28, 24),Salary = c(58000, 52000)
)# 按行合并
combined_df <- rbind(df, df2)# 按列合并
combined_df <- cbind(df, Experience = c(2, 5, 7, 3, 4))
数据框的常用函数

·head(df, n)tail(df, n):查看前 n 行或后 n 行。

·dim(df):查看数据框的维度(行数和列数)。

·nrow(df)ncol(df):分别返回行数和列数。

·summary(df):生成数据框的摘要统计信息。

·merge(df1, df2, by = "column_name"):按列合并两个数据框。

2.5 列表

列表是一种通用的数据结构,可以容纳不同类型的数据对象。列表是R中的一种非常灵活的数据类型,因为它可以包含多种类型的元素,包括向量、矩阵、数据框、甚至其他列表。

my_list <- list(1, "Hello", TRUE) # 创建一个简单的列表my_named_list <- list(Number = 1, Text = "Hello", Logical = TRUE) # 创建一个带有名称的列表nested_list <- list(list(1, 2), list("a", "b")) # 嵌套列表
列表的操作
my_list[[1]] # 访问第一个元素
my_list[1] # 返回一个列表,只包含第一个元素
my_named_list$Text # 访问名为 "Text" 的元素
nested_list[[1]][[2]] # 访问嵌套列表中的第二个元素my_list[[1]] <- 100 # 修改元素
my_list[[4]] <- NULL # 删除元素
列表的常用函数
length(my_list) # 来获取列表的长度
combined_list <- c(my_list, my_named_list)v # 使用c()函数来合并两个或多个列表
is.list(my_list) # 判断一个对象是否是列表

列表和数据框都可以包含不同类型的对象,但列表和数据框的区别是列表是一维和数据框是二维。除此之外,数据框要求每列的长度必须一致(即数据框的行数相同),但列表并不要求每个元素的长度一致。

相关文章:

【R语言速通】1.数据类型

文章目录 0. 变量名1.基本数据类型1.1 数值型1.2 整型1.3 复数型1.4 逻辑型1.5 字符型 2.复合数据类型2.1 向量向量操作向量的常用函数 2.2 矩阵矩阵操作矩阵的常用函数 2.3 数组数组的操作数据的运算数组的访问数组的维度操作 数组的常用函数 2.4 数据框数据框操作数据框的常用…...

【C++设计模式】(三)创建型模式:单例模式

文章目录 &#xff08;三&#xff09;创建型模式&#xff1a;单例模式饿汉式懒汉式饿汉式 v.s. 懒汉式 &#xff08;三&#xff09;创建型模式&#xff1a;单例模式 单例模式在于确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问该实例。在某些情况下&#xff0…...

基于Android Studio的行程记录APK开发指南(三)---界面设计及两种方法获取用户位置

前言 本系列教程我们来看看如何使用Android Studio去开发一个APK用于用户的实时行程记录 第一期&#xff1a;基于Android Studio的用户行程记录APK开发指南(一)&#xff1a;项目基础配置与速通Kotlin-CSDN博客第二期&#xff1a;基于Android Studio的行程记录APK开发指南(二):…...

大厂趋势:低代码不等于低能力,赋能高效开发新纪元

大厂趋势&#xff1a;低代码不等于低能力&#xff0c;赋能高效开发新纪元 在数字化转型的浪潮中&#xff0c;科技巨头&#xff08;大厂&#xff09;作为行业的引领者&#xff0c;不断探索和创新&#xff0c;以应对日益复杂多变的市场需求和技术挑战。其中&#xff0c;“低代码…...

CentOS全面停服,国产化提速,央国企信创即时通讯/协同门户如何选型?

01. CentOS停服带来安全新风险&#xff0c; 国产操作系统迎来新的发展机遇 2024年6月30日&#xff0c;CentOS 7版本全面停服&#xff0c;于2014年发布的开源类服务器操作系统——CentOS全系列版本生命周期画上了句号。国内大量基于CentOS开发和适配的服务器及平台&#xff0c…...

如何确定Kubernetes是在采用哪种方式进行部署的?

这里写目录标题 1. 查看 Kubernetes 安装方式的常见文件和工具2. 检查 Kubernetes 的节点信息3. 检查 Kubernetes API 服务器的版本信息4. 检查系统服务和容器5. 查看安装文档或管理员笔记为什么可以确定是 kubeadm 部署&#xff1f;下一步确认 如果存在多个master节点&#xf…...

【PostgreSQL】地理空间数据的数据类型定义、索引优化、查询优化策略

PostgreSQL 是开源关系型数据库&#xff0c;对于地理空间数据的处理提供了很好的支持。在处理地理空间数据时&#xff0c;优化索引和查询的性能至关重要&#xff0c;因为地理空间操作通常涉及大量的数据计算和复杂的几何形状比较。 一、地理空间数据类型 注意geometry和geogra…...

RocketMQ广播消费消息

1、 基础概念 RocketMQ 支持两种消息模式&#xff1a;集群消费&#xff08; Clustering &#xff09;和广播消费&#xff08; Broadcasting &#xff09;。 集群消费模式&#xff08;Cluster&#xff09;&#xff1a; 在集群消费模式下&#xff0c;同一个消费者组&#xff08…...

C#基础(2)枚举

前言 我们其实在前面已经了解过枚举到底有什么作用&#xff0c;但是那毕竟是概念性的语言&#xff0c;理解起来很抽象&#xff0c;今天我们会具体来讲一讲枚举&#xff0c;并谈一谈它的应用。 希望你能从今天的C#基础中有所收获。 基本概念 1.枚举&#xff1a;是一个比较特…...

Linux之MySQL日志

前言 数据库就像一个庞大的图书馆&#xff0c;而日志则是记录这个图书馆内每一本书的目录。正如在图书馆中找到特定书籍一样&#xff0c;数据库日志帮助我们追溯数据的变更、定位问题和还原状态。 在MySQL中&#xff0c;日志是非常重要的一个组成部分&#xff0c;它记录了数据…...

Redis集群模式—主从集群、哨兵集群、分片集群

主从集群 主从模式中&#xff0c;包括一个主节点&#xff08;Master&#xff09;和一个或多个从节点&#xff08;Slave&#xff09;。主节点负责处理所有写操作和读操作&#xff0c;而从节点则复制主节点的数据&#xff0c;并且只能处理读操作。当主节点发生故障时&#xff0c;…...

并发工具类(二):CyclicBarrier

1、CyclicBarrier 介绍 从字面上看 CyclicBarrier 就是 一个循环屏障&#xff0c;它也是一个同步助手工具&#xff0c;它允许多个线程 在执行完相应的操作后彼此等待共同到达一个屏障点。 CyclicBarrier可以被循环使用&#xff0c;当屏障点值变为0之后&#xff0c;可以在接下来…...

Spring Cloud全解析:负载均衡之Ribbon简介

Ribbon简介 Ribbon是一种客户端的软件负载均衡算法&#xff0c;将Netflix的中间层服务连接在一起&#xff0c;提供了一系列完善的配置如连接超时、重试等&#xff0c;Ribbon会自动的帮助基于某种规则(如简单轮询、随机连接等)去连接那些机器&#xff0c;也可以自定义的负载均衡…...

Kettle安装与使用指南

1. 介绍 什么是Kettle&#xff1f; Kettle&#xff0c;全称Pentaho Data Integration (PDI)&#xff0c;是Pentaho BI套件的一部分。它提供了一个可视化的ETL工具&#xff0c;允许用户通过图形界面设计复杂的数据集成流程。Kettle支持多种数据源&#xff0c;包括关系型数据库…...

教育行业解决方案:智能PPT在教育行业的创新应用

在信息化时代&#xff0c;教育行业面临着巨大的变革。随着人工智能技术的不断发展&#xff0c;传统教学方式正在被重新定义。彩漩科技作为 AI 技术的先行者&#xff0c;推出了歌者 PPT &彩漩 PPT&#xff0c;为教师、学生和家长提供了一种全新的教育体验&#xff0c;实现了…...

Matlab程序练习

Part1 1.求 [100,999] 之间能被 21整除的数的个数。 程序&#xff1a; 主文件&#xff1a;main.m clear; start_num 100; end_num 999; div_num 21; res div(start_num,end_num,div_num); fprintf("[%d,%d]之间能被%d整除的数的个数为%d个\n",start_num,end_…...

cesium可不可以改变影像底图颜色,如何给地球底图影像添加一层滤镜蒙版?

废话&#xff1a;你的球是不是很丑&#xff1f;是不是没有科技感&#xff1f;是不是没有好看的影像&#xff1f; 因果&#xff1a; 因&#xff1a;客户问&#xff0c;底图可不可以改变颜色&#xff0c;想让球更漂亮一些。 答&#xff1a;可以改变影像饱和度&#xff0c;透明度…...

MyBatis-MappedStatement什么时候生成?QueryWrapper如何做到动态生成了SQL?

通过XML配置的MappedStatement 这部分MappedStatement主要是由MybatisXMLMapperBuilder进行解析&#xff0c;核心逻辑如下&#xff1a; 通过注解配置的MappedStatement 核心逻辑就在这个里面了&#xff1a; 继承BaseMapper的MappedStatement 我们看看这个类&#xff0c;里…...

Netty系列-2 NioServerSocketChannel和NioSocketChannel介绍

背景 本文介绍Netty的通道组件NioServerSocketChannel和NioSocketChannel&#xff0c;从源码的角度介绍其实现原理。 1.NioServerSocketChannel Netty本质是对NIO的封装和增强&#xff0c;因此Netty框架中必然包含了对于ServerSocketChannel的构建、配置以及向选择器注册&am…...

智能客服的四大优势,提升企业服务效率

在这个信息化快速发展的时代&#xff0c;客户服务的重要性越来越凸显。传统的客服方式已经无法满足企业日益增长的服务需求&#xff0c;于是智能客服服务应运而生。智能客服服务不仅改变了企业与客户的互动方式&#xff0c;还提高了服务效率和客户满意度。本文将深入探讨智能客…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗&#xff1f; 在ComfyUI中实现图生视频并延长到5秒&#xff0c;需要结合多个扩展和技巧。以下是完整解决方案&#xff1a; 核心工作流配置&#xff08;24fps下5秒120帧&#xff09; #mermaid-svg-yP…...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西&#xff0c;但是如果把三者放在一起&#xff0c;它们之间到底什么关系&#xff1f;又有什么联系呢&#xff1f;我不是很明白&#xff01;&#xff01;&#xff01; 就比如说&#xff1a; 沙箱&#…...

土建施工员考试:建筑施工技术重点知识有哪些?

《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目&#xff0c;核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容&#xff0c;附学习方向和应试技巧&#xff1a; 一、施工组织与进度管理 核心目标&#xff1a; 规…...

链式法则中 复合函数的推导路径 多变量“信息传递路径”

非常好&#xff0c;我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题&#xff0c;统一使用 二重复合函数&#xff1a; z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y))​ 来全面说明。我们会展示其全微分形式&#xff08;偏导…...

命令行关闭Windows防火墙

命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)​方法二:CMD命令…...