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

news2024/12/24 9:20:37

文章目录

    • 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)
, , Matrix1

     Col1 Col2 Col3
Row1    1    4    7
Row2    2    5    8
Row3    3    6    9

, , Matrix2

     Col1 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) # 判断一个对象是否是列表

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2095003.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flutter安装问题解决

https://blog.csdn.net/Oven_maizi/article/details/126804404 首次运行 flutter dockor 报的错误&#xff0c;可以看到报错提示&#xff0c;安卓开发、win开发 还缺少依赖&#xff0c;但 web开发是可以的&#xff0c;那么只需要解决 网络资源不可用问题 PS E:\workspace\te…

生信机器学习入门4 - scikit-learn训练逻辑回归(LR)模型和支持向量机(SVM)模型

通过逻辑回归&#xff08;logistic regression&#xff09;建立分类模型 1.1 逻辑回归可视化和条件概率 激活函数 (activation function)&#xff1a; 一种函数&#xff08;如 ReLU 或 S 型函数&#xff09;&#xff0c;用于对上一层的所有输入进行求加权和&#xff0c;然后生…

计算机毕业设计hadoop+spark+hive酒店推荐系统 酒店数据分析可视化大屏 酒店爬虫 酒店预测系统 大数据毕业设计 Sqoop

《HadoopSparkHive酒店推荐系统》开题报告 一、研究背景与意义 随着互联网技术的飞速发展和人们生活水平的提高&#xff0c;旅游和酒店行业迎来了前所未有的发展机遇。然而&#xff0c;面对海量的酒店信息和多样化的用户需求&#xff0c;如何快速、准确地为用户推荐符合其需求…

vscode 远程SSH连接并配置C/C++开发环境

服务器配置 生成用户密钥 ssh-keygen -t rsa -b 4096 执行上面的命令后会在 ~/.ssh/ 目录生成密钥&#xff0c;然后导入密钥到认证文件中 cd .ssh/ cat id_rsa.pub >> authorized_keys最后将 id_rsa 传输到宿主机上 宿主机配置 安装插件 安装 remote-ssh 插件 配…

暑假学习内容简单总结

暑假总结 文章目录 暑假总结前言自动无限轮播图UITableView给不同组设置独立的cell设置cell宽度设置组间距折叠cell CALayer的简单使用CALayer实现一个视图裁剪CALayer的contentGravity的属性CALayer设置背景图自定义UIColor 网络请求正则表达式小结 前言 笔者在暑假通过几个项…

atcoder abc 369

A 369 问题&#xff1a; 思路&#xff1a;暴力枚举 代码&#xff1a; #include <bits/stdc.h>using namespace std;int main() {int a, b;cin >> a >> b;int cnt 0;for(int i -1000; i < 1000; i ) {vector<int> aa;aa.push_back(a);aa.push…

网络编程套接字(含Java示例)

文章目录 Socket套接字概念分类流式套接字&#xff1a;使用传输层TCP协议数据报套接字&#xff1a;使用传输层UDP协议Unix域套接字 TCP vs UDP有连接 vs 无连接可靠传输 vs 不可靠传输面向字节流 vs 面向数据报全双工 vs 半双工 UDP数据报套接字编程DatagramSocketDatagramPack…

AI安全前沿:模型攻击与防御策略

引言 随着chatGPT的横空出世&#xff0c;通用人工智能的时代正式开启。人工智能极大地影响了人类的生活方式和生产方式&#xff0c;例如以ChatGPT为代表的各类大模型&#xff0c;能够理解和生成人类语言&#xff0c;并以对话的方式同人类进行互动&#xff0c;能够执行撰写文本…

央视报道:国产时序数据库 IoTDB 刷新世界性能纪录!

IoTDB&#xff08;Internet of Things Database&#xff09;是一个专为物联网&#xff08;IoT&#xff09;场景设计的时间序列数据库管理系统&#xff08;TSDB&#xff09;。随着物联网技术的发展&#xff0c;大量的设备连接到互联网上&#xff0c;产生了海量的时间序列数据。这…

各位天命人!国自然评审意见出来了,那如何判断是否上会?

公众号&#xff1a;生信漫谈&#xff0c;获取最新科研信息&#xff01; 各位天命人&#xff01;国自然评审意见出来了&#xff0c;那如何判断是否上会&#xff1f;https://mp.weixin.qq.com/s?__bizMzkwNjQyNTUwMw&mid2247487055&idx1&sn1dc8b66e10323d37e477e88…

新版本 Redline 使用 Lua 字节码逃避检测

近日&#xff0c;研究人员观察到 Redline Stealer 木马的新变种&#xff0c;开始利用 Lua 字节码逃避检测。 遥测分布 根据遥测数据&#xff0c;Redline Stealer 木马已经日渐流行&#xff0c;覆盖北美洲、南美洲、欧洲和亚洲甚至大洋洲。 感染链 感染链 微软官方账户的 vcp…

基于Java的汽车推荐购买系统的设计与实现(论文+源码)_kaic

摘要 随着经济水平的不断提高&#xff0c;汽车销售行业存在激烈竞争&#xff0c;人们对于生活中汽车的需求也越来越多&#xff0c;而目前的汽车推荐购买管理由于存在管理不规范性等缺点&#xff0c;严重制约了汽车推荐购买和汽车公司的发展&#xff0c;因此需要设计一个汽车推荐…

一加8T安装 Kali NetHunter 高阶教程 KB2000刷机 param预载失败 高通9008驱动签名 小米刻晴主题

前言 本文包含一加8T手机刷入kaili nethunter 的详细版教程、资源、刷机知识思维导图、param预载失败问题解决、高通刷机驱动故障问题解决、小米刻晴主题等资源的分享 本机环境 手机&#xff1a;OnePlus 8T &#xff08;型号KB2000&#xff09; 系统&#xff1a;Android 13 …

公司招聘中,多个面试官对候选人评价不一致怎么办?

面试过程中&#xff0c;极易出现面试官评价标准不一的情况&#xff0c;为了有效解决这一问题&#xff0c;企业可以建立一套标准化的面试评分体系&#xff0c;在该体系中&#xff0c;应该详细包括统一的评分标准和评分细则&#xff0c;内容覆盖求职者的专业技能、沟通能力、团队…

【Threejs进阶教程-着色器篇】6. 2D SDF(三) 移动图形,限制图形,绘制多个图形

2D SDF 移动与合并图形 前五篇地址&#xff0c;建议按顺序学习本篇使用到的初始代码减小扩散范围clamp函数修改maxDistance来修改扩散范围 移动扩散中心添加第二个扩散点降低点的同步率调整参数来优化效果添加更多扩散点 完整源码如有不明白的&#xff0c;可以在下方留言或者加…

01:【stm32HAL】对GPIO的操作

对GPIO的操作 1、LED闪烁2、按键控制LED3、芯片调试接口被锁死导致无法下载程序 1、LED闪烁 使用的是STM32CubeMXKeilv5进行HAL库的开发。 开发的步骤&#xff1a; 第一步&#xff1a;新建工程 第二步&#xff1a;选择芯片 第三步&#xff1a;如下图哈哈 第四步&#xff1a;…

图像识别智能垃圾桶项目开发--语音命令识别垃圾

一、项目思维导图 二、语音模块配置信息 三、项目程序 main.c garbage.c garbage.h uartTool.c //串口发送数据 uartTool.h

IPv6配置实验(OSPFv3)

1.搭建拓扑图 2.配置接口IP地址

文件上传的学习

文件上传漏洞 文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷&#xff0c;而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马&#xff0c;病毒&#xff0c;恶意脚本或者WebShell等。“文件上传”本身没有…

计算机毕业设计推荐-基于python的公司员工考勤管理系统

&#x1f496;&#x1f525;作者主页&#xff1a;毕设木哥 精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; 实战项目 文章目录 实战项目 一、基于python的公司员工考勤管…