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

R语言速通

1.R语言和python语言差不多,例如print()和·注释方式等,但是有一些细节需要注意

2.数据类型

1)按对象类型来分是以下 6 种(后面会详细介绍这几种类型):

  • 向量
  • 列表
  • 矩阵
  • 数组
  • 因子
  • 数据框

2)向量

R 语言中向量作为一种类型存在可以让向量的操作变得更加容易:

> a = c(3, 4)
> b = c(5, 0)
> a + b
[1] 8 4
>

c() 是一个创造向量的函数。

这里把两个二维向量相加,得到一个新的二维向量 (8, 4)。如果将一个二维向量和三维向量做运算,将失去数学意义,虽然不会停止运行,但会被警告。

向量中的每一个元素可以通过下标单独取出,但需要注意的是:R 语言中的"下标"不代表偏移量,而代表第几个,也就是说是从 1 开始的!

> a[1:4] # 取出第 1 到 4 项,包含第 1 和第 4 项
[1] 10 20 30 40
> a[c(1, 3, 5)] # 取出第 1, 3, 5 项
[1] 10 30 50
> a[c(-1, -5)] # 去掉第 1 和第 5 项
[1] 20 30 40

这里和python就很不相同

一些常用方法

> toupper("Runoob") # 转换为大写
[1] "RUNOOB"
> tolower("Runoob") # 转换为小写
[1] "runoob"
> nchar("中文", type="bytes") # 统计字节长度
[1] 4
> nchar("中文", type="char") # 总计字符数量
[1] 2
> substr("123456789", 1, 5) # 截取字符串,从 1 到 5
[1] "12345"
> substring("1234567890", 5) # 截取字符串,从 5 到结束
[1] "567890"
> as.numeric("12") # 将字符串转换为数字
[1] 12
> as.character(12.34) # 将数字转换为字符串
[1] "12.34"
> strsplit("2019;10;1", ";") # 分隔符拆分字符串
[[1]]
[1] "2019" "10"   "1"
> gsub("/", "-", "2019/10/1") # 替换字符串
[1] "2019-10-1"

3)矩阵

R 语言为线性代数的研究提供了矩阵类型,这种数据结构很类似于其它语言中的二维数组,但 R 提供了语言级的矩阵运算支持。

> vector=c(1, 2, 3, 4, 5, 6)
> matrix(vector, 2, 3)
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

solve() 函数主要用于求解线性方程组或计算矩阵的逆。

apply() 函数可以将矩阵的每一行或每一列当作向量来进行操作

> (A = matrix(c(1, 3, 2, 4), 2, 2))
     [,1] [,2]
[1,]    1    2
[2,]    3    4
> apply(A, 1, sum) # 第二个参数为 1 按行操作,用 sum() 函数
[1] 3 7
> apply(A, 2, sum) # 第二个参数为 2 按列操作
[1] 4 6

3.判断和python一样,if,else if,else,多了个switch(),<-赋值运算符(assignment operator),用于将右侧的值赋给左侧的变量。

x <- switch(
   3,            # 选择索引 3
   "google", 
   "runoob", 
   "taobao", 
   "weibo"
)
print(x)  # 输出 "taobao"

4.for循环和while循环对比

1)

语言遍历方式是否支持索引迭代对象
Pythonfor ... in需要 enumerate() 获取索引列表、元组、字典、字符串、范围等
Rfor (var in vec)直接遍历值(不提供索引)主要遍历 向量

2)Python 和 R 语言都支持跳出循环 (break) 和跳过当前循环 (continue in Python, next in R)。

3)R 语言有 repeat 循环,而 Python 没有,但 while True 可以实现类似功能。

repeat 循环会一直执行代码,直到条件语句为 true 时才退出循环,退出要使用到 break 语句。

语法格式如下:

repeat { 
    // 相关代码 
    if(condition) {
       break
    }
}


v <- c("Google","Runoob")
cnt <- 2

repeat {
   print(v)
   cnt <- cnt+1
   
   if(cnt > 5) {
      break
   }
}

5.R函数

也是function

function_name <- function(arg_1, arg_2, ...) {
    # 函数体
    # 执行的代码块
    return(output)
}


# 定义一个加法函数
add_numbers <- function(x, y) {
  result <- x + y
  return(result)
}

# 调用函数
sum_result <- add_numbers(3, 4)
print(sum_result)  # 输出 7

6.字符串

特性PythonR 语言
单引号字符串可以包含双引号,不能直接包含单引号,需转义不能包含单引号,包含双引号无须转义
双引号字符串可以包含单引号,不能直接包含双引号,需转义不能包含双引号,包含单引号无须转义
多行字符串可以使用三引号('''"""使用 cat() 或换行符 \n 来处理多行字符串
format() 函数用于格式化字符串,format() 可作用于字符串或数字。

# 显示 9 位,最后一位四舍五入
result <- format(23.123456789, digits = 9)
print(result)

# 使用科学计数法显示
result <- format(c(6, 13.14521), scientific = TRUE)
print(result)

# 小数点右边最小显示 5 位,没有的以 0 补充
result <- format(23.47, nsmall = 5)
print(result)

# 将数字转为字符串
result <- format(6)
print(result)

# 宽度为 6 位,不够的在开头添加空格
result <- format(13.7, width = 6)
print(result)

# 左对齐字符串
result <- format("Runoob", width = 9, justify = "l")
print(result)

# 居中显示
result <- format("Runoob", width = 10, justify = "c")
print(result)

 7.列表

# 列表包含向量、矩阵、列表
list_data <- list(c("Google","Runoob","Taobao"), matrix(c(1,2,3,4,5,6), nrow = 2),
   list("runoob",12.3))

# 给列表元素设置名字
names(list_data) <- c("Sites", "Numbers", "Lists")

# 添加元素
list_data[4] <- "新元素"
print(list_data[4])

# 删除元素
list_data[4] <- NULL

# 删除后输出为 NULL
print(list_data[4])

# 更新元素
list_data[3] <- "我替换来第三个元素"
print(list_data[3])



输出:
[[1]]
[1] "新元素"

$<NA>
NULL

$Lists
[1] "我替换来第三个元素"

也可以使用 c() 函数来创建列表,也可以使用该函数将多个对象合并为一个列表,例如:

# 创建包含数字的向量
numbers <- c(1, 2, 3, 4, 5)

# 创建包含字符的向量
characters <- c("apple", "banana", "orange")


# 合并两个数字向量
merged_vector <- c(numbers, c(6, 7, 8))

# 合并两个字符向量
merged_characters <- c(characters, c("grape", "melon"))

8.矩阵

# 定义行和列的名称
rownames = c("row1", "row2", "row3", "row4")
colnames = c("col1", "col2", "col3")

# 创建矩阵
P <- matrix(c(3:14), nrow = 4, byrow = TRUE, dimnames = list(rownames, colnames))
print(P)
# 获取第一行第三列的元素
print(P[1,3])

# 获取第四行第二列的元素
print(P[4,2])

# 获取第二行
print(P[2,])

# 获取第三列
print(P[,3])

输出:
col1 col2 col3
row1    3    4    5
row2    6    7    8
row3    9   10   11
row4   12   13   14
[1] 5
[1] 13
col1 col2 col3 
    6    7    8 
row1 row2 row3 row4 
    5    8   11   14 

9.数组

# 创建两个不同长度的向量
vector1 <- c(5,9,3)
vector2 <- c(10,11,12,13,14,15)
column.names <- c("COL1","COL2","COL3")
row.names <- c("ROW1","ROW2","ROW3")
matrix.names <- c("Matrix1","Matrix2")

# 创建数组
result <- array(c(vector1,vector2),dim = c(3,3,2),dimnames = list(row.names, column.names, matrix.names))

# 显示数组第二个矩阵中第三行的元素
print(result[3,,2])

# 显示数组第一个矩阵中第一行第三列的元素
print(result[1,3,1])

# 输出第二个矩阵
print(result[,,2])

输出:
COL1 COL2 COL3 
   3   12   15 
[1] 13
     COL1 COL2 COL3
ROW1    5   10   13
ROW2    9   11   14
ROW3    3   12   15

10.因子

因子(Factor) 是一种用于表示分类数据的数据类型。因子常用于处理具有有限类别(水平)的数据,比如性别、颜色、等级、州名等。因子与普通的向量不同,它不仅存储数据的值,还存储这些值的水平(levels),即类别标签。

因子由以下两部分组成:

  1. 因子值(Factor values):实际的观测值。例如:MaleFemaleRedBlue
  2. 因子水平(Levels):数据集中所有可能的类别或水平。例如,性别变量的水平可能是 MaleFemale,颜色变量的水平可能是 RedBlueGreen 等。

1)R 语言创建因子使用 factor() 函数,向量作为输入参数。

x <- c("男", "女", "男", "男",  "女")
sex <- factor(x)
print(sex)
print(is.factor(sex))

输出:
[1] 男 女 男 男 女
Levels: 男 女
[1] TRUE

2). 因子的水平(Levels)

# 创建一个因子
gender <- factor(c("Male", "Female", "Female", "Male", "Male"))
print(gender)



输出:
[1] Male   Female Female Male   Male  
Levels: Female Male

3)因子的标签

# 设置因子水平和标签
color <- factor(c("red", "blue", "green", "blue"), 
                levels = c("red", "blue", "green"),
                labels = c("Red", "Blue", "Green"))
print(color)


输出:
[1] Red   Blue  Green Blue 
Levels: Red Blue Green

11.数据框

数据框(Data frame)可以理解成我们常说的"表格"。

数据框是 R 语言的数据结构,是特殊的二维列表。

数据框每一列都有一个唯一的列名,长度都是相等的,同一列的数据类型需要一致,不同列的数据类型可以不一样。

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

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

合并数据框:

# data frame 1
df1 = data.frame(SiteId = c(1:6), Site = c("Google","Runoob","Taobao","Facebook","Zhihu","Weibo"))


# data frame 2
df2 = data.frame(SiteId = c(2, 4, 6, 7, 8), Country = c("CN","USA","CN","USA","IN")) 

# INNER JOIN 
df1 = merge(x=df1,y=df2,by="SiteId")
print("----- INNER JOIN -----")
print(df1)

# FULL JOIN
df2 = merge(x=df1,y=df2,by="SiteId",all=TRUE)
print("----- FULL JOIN -----")
print(df2)

# LEFT JOIN
df3 = merge(x=df1,y=df2,by="SiteId",all.x=TRUE)
print("----- LEFT JOIN -----")
print(df3)

# RIGHT JOIN
df4 = merge(x=df1,y=df2,by="SiteId",all.y=TRUE)
print("----- RIGHT JOIN -----")
print(df4)



输出:
[1] "----- INNER JOIN -----"
  SiteId     Site Country
1      2   Runoob      CN
2      4 Facebook     USA
3      6    Weibo      CN
[1] "----- FULL JOIN -----"
  SiteId     Site Country.x Country.y
1      2   Runoob        CN        CN
2      4 Facebook       USA       USA
3      6    Weibo        CN        CN
4      7     <NA>      <NA>       USA
5      8     <NA>      <NA>        IN
[1] "----- LEFT JOIN -----"
  SiteId   Site.x Country   Site.y Country.x Country.y
1      2   Runoob      CN   Runoob        CN        CN
2      4 Facebook     USA Facebook       USA       USA
3      6    Weibo      CN    Weibo        CN        CN
[1] "----- RIGHT JOIN -----"
  SiteId   Site.x Country   Site.y Country.x Country.y
1      2   Runoob      CN   Runoob        CN        CN
2      4 Facebook     USA Facebook       USA       USA
3      6    Weibo      CN    Weibo        CN        CN
4      7     <NA>    <NA>     <NA>      <NA>       USA
5      8     <NA>    <NA>     <NA>      <NA>        IN

安装库(类似于python的pip)

# 安装库,MASS 包含很多统计相关的函数,工具和数据集
install.packages("MASS", repos = "https://mirrors.ustc.edu.cn/CRAN/") 
  
#  melt() 和 cast() 函数需要对库 
install.packages("reshape2", repos = "https://mirrors.ustc.edu.cn/CRAN/") 
install.packages("reshape", repos = "https://mirrors.ustc.edu.cn/CRAN/") 


# 载入库
library(MASS) 
library(reshape2) 
library(reshape) 
  
# 创建数据框
id<- c(1, 1, 2, 2) 
time <- c(1, 2, 1, 2) 
x1 <- c(5, 3, 6, 2) 
x2 <- c(6, 5, 1, 4) 
mydata <- data.frame(id, time, x1, x2) 
  
# 原始数据框
cat("原始数据框:\n") 
print(mydata) 
# 整合
md <- melt(mydata, id = c("id","time")) 
  
cat("\n整合后:\n") 
print(md)
输出:
原始数据框:
id time x1 x2
1  1    1  5  6
2  1    2  3  5
3  2    1  6  1
4  2    2  2  4

整合后:
id time variable value
1  1    1       x1     5
2  1    2       x1     3
3  2    1       x1     6
4  2    2       x1     2
5  1    1       x2     6
6  1    2       x2     5
7  2    1       x2     1
8  2    2       x2     4

12.R----csv处理

1)data <- read.csv("sites.csv", encoding="UTF-8")
print(data)


2)data <- read.csv("sites.csv", encoding="UTF-8")
print(is.data.frame(data))  # 查看是否是数据框
print(ncol(data))  # 列数
print(nrow(data))  # 行数



3)
data <- read.csv("sites.csv", encoding="UTF-8")
# likes 最大的数据
like <- max(data$likes)
print(like)


4)查找
data <- read.csv("sites.csv", encoding="UTF-8")

# likes 为 222 的数据
retval <- subset(data, likes == 222)
print(retval)


5)保存

data <- read.csv("sites.csv", encoding="UTF-8")

# likes 为 222 的数据
retval <- subset(data, likes == 222)

# 写入新的文件
write.csv(retval,"runoob.csv")
newdata <- read.csv("runoob.csv")
print(newdata)

13.还有一些R语言操作mysql,xlsx,xml,绘图的例子,具体可以参考

R Excel 文件 | 菜鸟教程


http://www.kler.cn/a/533393.html

相关文章:

  • 《运维:技术的基石,服务的保障》
  • PAT甲级1052、Linked LIst Sorting
  • 大数据挖掘--两个角度理解相似度计算理论
  • 携程Java开发面试题及参考答案 (200道-上)
  • Kafka SSL(TLS)安全协议
  • 龙芯+FreeRTOS+LVGL实战笔记(新)——16数码管驱动
  • PyQt6/PySide6 的 QDialog 类
  • Spring Security(maven项目) 3.0.3.1版本 - 动态JDBC认证
  • https是如何保证安全的,又是如何保证不被中间人攻击的?
  • 防火墙的安全策略
  • VMware ThinApp 和VMware Workstation
  • MyBatis 调优指南:释放持久层性能潜力
  • 论计算机网络技术专业如何?创新
  • Aosp 15 编译遇到问题排查
  • Docker数据卷管理及优化
  • 计算机网络之数据链路层(数据链路层的功能)
  • 最新道路运输安全员管理人员考试真题
  • 通过docker安装部署deepseek以及python实现
  • java:mysql切换达梦数据库(五分钟适配完成)
  • 亚远景-从SPICE到ASPICE:汽车软件开发的标准化演进
  • DeepSeek辅助学术写作查找概念效果如何?
  • Java爬蟲與代理伺服器的應用
  • 机器学习之数学基础:线性代数、微积分、概率论 | PyTorch 深度学习实战
  • c++常见位运算
  • Jsoup库具体怎么用?
  • 嵌入式工程师必学(143):模拟信号链基础