R语言常用函数汇总:数学统计、概率与字符处理全覆盖

发布时间:2026/10/21 19:43:39
R语言常用函数汇总:数学统计、概率与字符处理全覆盖 简介面向数据分析和统计学习者的R语言常用函数速查手册以PDF格式整理适合刚接触R语言、备考数据分析岗位或在建模前需要快速检索函数用法的读者。内容按数学、统计、概率、字符处理与其他实用函数五类系统展开覆盖绝对值、平方根、取整与舍入等数学操作均值、中位数、标准差、方差、分位数等统计指标常见概率分布及其调用方式以及字符串提取、查找、替换、连接等处理技巧并收入序列生成、重复、分组、合并与随机数生成等实用功能可作为日常编码和数据分析的随身参考。资源包含1个PDF文件大小约50KB轻便易存适合离线查阅。目前已有294人学习下载适合R语言入门者快速建立函数使用框架也为进阶学习者提供集中复习清单每类函数均按作用集中排列便于按需翻阅。1. 学 R 最容易踩的坑不是函数难而是查函数比学函数还费时间刚接触 R 的人大多经历过这个场景数据读进来了头两行看着还行想算个均值、中位数、标准差却突然卡住——mean 还是 mediansd 还是 varquantile 的 probs 参数到底写 0.25 还是 c(0.25, 0.5, 0.75)再往后做点字符清洗grep 和 sub 的正则表达式又把人绕晕。我见过不少同事R 用了两三年翻来覆去用的还是那五六个函数不是因为别的是每次想用新函数都懒得查、怕查不到、查到了也不知道参数怎么填。这份《R语言常用函数汇总》PDF 做的就是把高频函数按类别收拢在一起数学、统计、概率、字符处理、数据操作全覆盖拿到手可以直接照着敲。适合三类人刚开始学 R 的初学者备赛统计建模或数据分析项目的学生以及经常要给数据做清洗和描述性统计的从业者。它给的不是代码仓库是一份能塞进书包的函数地图。2. 数学与统计函数先搞懂边界条件再谈计算2.1 数学函数的使用边界数学函数看着简单其实最容易出问题的是边界行为。abs() 和 sqrt() 没什么好说的但 ceiling() 和 floor() 的方向概念需要反复确认ceiling(3.2) 返回 4floor(3.2) 返回 3ceiling(-3.2) 返回 -3而 floor(-3.2) 返回 -4。很多人在负数上栽过跟头因为语言习惯里“向上取整”容易理解成“往绝对值大的方向走”实际上 ceiling 是向正无穷方向取整floor 是向负无穷方向取整。round(x, digitsn) 的 n 是保留的小数位数而不是有效数字round(1234.567, 2) 得到 1234.57round(1234.567, -2) 会得到 1200负数位数代表往整数高位舍入这个特性在做数据展示时很好用但第一次用的人会愣一下。signif(x, digitsn) 就可以直接处理有效数字signif(0.0012345, 3) 得到 0.00123这才是真正的有效数字舍入。# 边界行为和参数区分示例 x - c(3.2, -3.2, 1234.567, 0.0012345) # 向正无穷取整不是向绝对值大的方向 print(ceiling(x[2])) # 输出 -3 # round 的 digits 为负数时舍入到十位、百位 print(round(x[3], -2)) # 输出 1200 # signif 按有效数字位数舍入不受小数位限制 print(signif(x[4], 3)) # 输出 0.00123逻辑说明这四行代码分别展示了 ceiling 对负数的处理方向、round 的负数 digits 含义、以及 signif 与 round 的本质区别。注意 round 的 digits 是小数位signif 的 digits 是有效数字位两者不要混用。参数说明x 是数值型向量digits 可以是负数signif 的 digits 必须为正整数。2.2 统计函数里的两个隐蔽参数mean(x) 和 median(x) 属于必用项但 mean 里有个关于缺失值的参数很多人用了一年都没注意到。数据里出现 NA 时mean(c(1, 2, NA)) 直接返回 NA而不是跳过缺失后求均值。加 na.rm TRUE 才会得到 1.5。这个参数在 sd()、var()、sum()、min()、max() 里同样生效忘了写就是一片 NA。quantile(x, probs) 的 probs 参数是 [0, 1] 区间的概率向量默认是 c(0, 0.25, 0.5, 0.75, 1) 即五个分位点。需要自定义分位时记得写 probs c(0.05, 0.95) 这样的完整形式。另外 scale(x, centerTRUE, scaleTRUE) 这个函数是中心化和标准化的总入口centerTRUE 表示每列减去均值scaleTRUE 表示每列除以标准差两个都 TRUE 就是 z-score 标准化。只想中心化不想标准化时写 scale(x, centerTRUE, scaleFALSE)。# 统计函数的缺失值处理和标准化 vec - c(10, 20, NA, 40) # 默认返回 NA需要显式声明 na.rm TRUE print(mean(vec, na.rm TRUE)) # 输出 25 # 自定义分位数 print(quantile(c(1:10), probs c(0.1, 0.9))) # 输出 1.9 和 9.1 # 只中心化不标准化 df - data.frame(a c(1, 2, 3), b c(4, 5, 6)) print(scale(df, center TRUE, scale FALSE))逻辑说明第一个例子展示了缺失值处理的开关参数 na.rm第二个例子说明 probs 可以接受任意位置的概率向量第三个例子演示 scale 函数中 center 和 scale 两个逻辑参数的组合效果中心化后的数据每列均值为 0。参数说明na.rm 取 TRUE 或 FALSEprobs 是数值型向量center 和 scale 是布尔值默认均为 TRUE。2.3 diff 和 difftime 的时间序列场景diff(x, lagn) 做滞后差分时lag1 表示相邻两项相减lag2 表示隔一项相减。在股价日收益率、气温变化率这类场景中非常常用。difftime(time1, time2, unitsc(auto, secs, mins, hours, days, weeks)) 是专门计算时间间隔的函数注意两个 time 参数需要是 POSIXct 或 Date 类型不是字符串。用 as.POSIXct() 转换后再传给 difftime否则会报错或给出不可解释的结果。units 参数建议显式指定auto 有时会给出出人意料的单位。# 滞后差分和时间间隔计算 prices - c(100, 102, 101, 105, 110) # 一阶差分表示相邻价格变化 print(diff(prices, lag 1)) # 输出 2 -1 4 5 # 二阶差分表示变化量的变化 print(diff(prices, lag 2)) # 输出 1 3 9 # 时间间隔先转 POSIXct再指定单位 t1 - as.POSIXct(2024-01-01 08:00:00) t2 - as.POSIXct(2024-01-01 10:30:00) print(difftime(t2, t1, units hours)) # 输出 2.5 hours逻辑说明diff 的结果向量长度是原向量长度减 lagdifftime 要求输入必须是时间类型对象字符串必须先转换。参数说明lag 默认为 1units 建议从 mins、hours、days 等中显式选择避免 auto 的不确定性。这里的时间格式是常见的 YYYY-MM-DD HH:MM:SS不同操作系统可能有差异。3. 概率函数四件套d/p/q/r 前缀决定一切3.1 分布名称对照这份 PDF 里列出了 19 种常见分布beta、binom、cauchy、chisq、exp、f、gamma、geom、hyper、lnorm、logis、multinom、nbinom、norm、pois、signrank、t、unif、weibull、wilcox。每个分布名对应四个前缀函数它们的命名规则是固定的d 开头是密度函数p 开头是分布函数q 开头是分位数函数r 开头是随机数生成函数。比如正态分布dnorm(x, mean, sd) 算概率密度pnorm(q, mean, sd) 算累积概率qnorm(p, mean, sd) 算分位数rnorm(n, mean, sd) 生成随机数。只要记住分布缩写就可以推断出四个函数的函数名这是 R 里最规律的一类函数。3.2 分布函数与分位数函数的两两换算pnorm 和 qnorm 是互逆操作。pnorm(1.96) 返回 0.975而 qnorm(0.975) 返回 1.96。这在构造置信区间时非常关键比如 95% 置信区间对应的 z 值是 qnorm(0.975) 而不是 qnorm(0.95)。同样地t 分布的 qt(0.975, df n-1) 在样本量小的时候会给出比 1.96 更大的值这是 t 分布厚尾特性的直接体现。做假设检验或置信区间时很容易忘记自由度参数导致结果错误。# 正态分布函数的互逆关系 # 已知分位点求累积概率 p_val - pnorm(1.96, mean 0, sd 1) print(p_val) # 输出接近 0.975 # 已知概率反求分位点 q_val - qnorm(0.975, mean 0, sd 1) print(q_val) # 输出接近 1.96 # t 分布与正态分布的分位数差异 print(qt(0.975, df 10)) # 约 2.23大于 1.96逻辑说明pnorm 和 qnorm 互为反函数给定均值 mean 和标准差 sd 后可以互相推算。t 分布在小样本时尾部更厚同样的 0.975 概率对应更大的临界值这在样本量小于 30 时尤其要注意。参数说明mean 和 sd 是分布参数df 是自由度必须为正值。3.3 随机数生成设置种子才可复现rnorm(n, mean, sd) 和 runif(n, min, max) 在每次运行时产生的随机数都不同这会导致分析结果无法复现。在写教学文档或跑模拟实验时必须用 set.seed() 固定随机种子。set.seed(42) 之后再调用 rnorm每次都会得到同一串随机数这对调试和结果共享非常关键。一个常被忽略的细节是set.seed 需要在每次生成随机数之前重新调用而不是只在代码开头调用一次如果中间有其他随机数生成操作后续序列就会改变。# 可复现的随机数生成 set.seed(123) rand_vals - rnorm(5, mean 0, sd 1) print(rand_vals) # 再次设置相同种子得到相同序列 set.seed(123) rand_vals_2 - rnorm(5, mean 0, sd 1) print(rand_vals_2) # 与 rand_vals 完全相同 # 种子影响 scope每次生成前都需要 set.seed set.seed(1) runif(3, min 0, max 100) set.seed(1) # 如果不重新设置后续序列会不同 runif(3, min 0, max 100)逻辑说明set.seed 接收一个整数参数之后第一次调用随机数生成函数时会返回固定序列。参数说明概率密度函数中 x 是数值向量分布函数中 q 是分位数向量随机数生成函数中 n 是生成数量。runif 的 min 和 max 是区间端点注意默认不包含 max。4. 字符处理函数正则表达式是分水岭4.1 基础字符操作nchar、substr、pastenchar(x) 用来计算字符数量注意中文字符在 R 的默认编码下按一个字计算但在某些 Windows 系统上可能按两个字节计算踩过这个坑的人不在少数。substr(x, start, stop) 的 start 和 stop 都是字符位置索引从 1 开始计数可以用于字串提取也可以用于替换。paste() 是最常用的字符串拼接函数默认用空格分隔需要无分隔符拼接时用 paste0()。# 字符长度和子串提取 text - 数据分析 print(nchar(text)) # 输出 4 # 提取子串 print(substr(Hello World, 1, 5)) # 输出 Hello # 拼接字符串注意 sep 与 paste0 的区别 print(paste(file, 2024, sep _)) # file_2024 print(paste0(file, 2024)) # file2024 print(paste(c(a, b), collapse ,)) # a,b逻辑说明nchar 按字符计数但受系统编码影响substr 的 start 和 stop 都是闭区间paste 的 sep 是连接多个向量元素时的分隔符collapse 是把一个向量内的多个元素合并为单个字符串时的连接符。参数说明paste 默认 sep 为空格paste0 则固定无分隔collapse 参数只在处理向量时使用。4.2 grep 与 sub正则查找和替换grep() 在文本向量中查找匹配正则表达式的元素返回匹配的索引配合 value TRUE 可以直接返回匹配的文本内容。sub() 做替换时需要注意它只替换第一个匹配项要替换全部匹配项需要 gsub()。正则表达式中的特殊字符如点号是万能匹配符想匹配字面量点号必须用反斜杠转义。# 正则表达式的查找和替换 emails - c(alicetest.com, bobsample.org, charlietest.com) # 查找包含 test 的元素返回原始文本 print(grep(test, emails, value TRUE)) # 匹配任意字符点号是通配符需要转义才匹配字面量点号 print(grep(\\., emails, value TRUE)) # sub 只替换第一处gsub 替换全部 print(sub(com, cn, test.com, test.com)) print(gsub(com, cn, test.com, test.com))逻辑说明grep 的 value 参数决定返回的是索引还是原始文本sub 和 gsub 的区别在于是替换第一个匹配还是全部匹配正则表达式中 \\. 表示匹配字面量点号。参数说明grep 的 pattern 支持正则表达式ignore.case TRUE 可以忽略大小写fixed TRUE 则按字面文本匹配不解析正则。4.3 strsplit 的分隔符陷阱strsplit(x, split, fixedFALSE) 的 split 参数默认按正则表达式解析这意味着如果你想按点号拆分字符串直接写 split . 会得到空字符串因为点号匹配任意单字符。解决方法是写 split \. 或设置 fixed TRUE。这个细节几乎每个做文本清洗的人都会碰到一次尤其是处理 IP 地址或文件后缀名时。# 按点号拆分的正确姿势 ip - 192.168.1.100 # 错误示范split 默认是正则点号匹配任意字符 print(strsplit(ip, .)) # 得到空字符串列表 # 正确方法一转义点号 print(strsplit(ip, \\.)) # 正确方法二fixed TRUE 按字面匹配 print(strsplit(ip, ., fixed TRUE))逻辑说明strsplit 的 split 参数如果包含正则元字符必须转义或设置 fixed TRUE。返回值是一个列表如果要对每个元素直接处理往往配合 unlist() 使用。参数说明fixed 默认 FALSE当不需要正则解析时设置为 TRUE 会显著提升性能同时避免转义烦恼。5. 数据操作函数与常见问题合并、命名、边界条件5.1 合并函数 cbind 与 rbind 的行列数限制cbind() 按列合并要求所有数据对象行数相等rbind() 按行合并要求列数相等。这个约束经常在合并不同来源的数据时报错最常见的错误信息是 number of rows of matrices must match。合并时还要注意数据类型cbind 一个数值向量和一个字符向量会把数值强转为字符。这个行为很隐蔽需要在合并且检查数据结构是否保持原样。# 合并对象的维度约束 df1 - data.frame(id 1:3, score c(88, 92, 95)) df2 - data.frame(id 4:6, score c(76, 81, 79)) # 按行合并要求列名一致 combined - rbind(df1, df2) print(combined) # cbind 时如果行数不等会循环补齐或报错 extra - c(10, 20) # 不推荐依赖循环补齐的隐式行为逻辑说明rbind 要求两个数据框的列名和列数完全一致否则结果列对不齐。cbind 的行数必须匹配长度不足时 R 会自动循环补齐这会让数据意外重复建议合并前先用 nrow() 检查维度。参数说明cbind 和 rbind 都接受数据框、矩阵或向量返回类型取决于输入类型。5.2 rownames 与 colnames 的重命名细节rownames() 和 colnames() 用于修改行名和列名。注意 colnames() 返回的是列名的字符向量直接用下标赋值即可。修改行名时行名的长度必须与数据框行数一致否则报错。还有一个常用操作是将第一个列设为行名用到 rownames(df) - df$id然后再删除 id 列这在处理带有 ID 列的数据时非常常见。# 修改列名和行名的标准操作 df - data.frame(a 1:3, b 4:6) # 整体赋值列名 colnames(df) - c(x, y) # 单独修改一个列名 colnames(df)[1] - new_x # 行名整体赋值 rownames(df) - c(row1, row2, row3) # 把某列设为行名 df2 - data.frame(id c(A, B), val c(10, 20)) rownames(df2) - df2$id df2$id - NULL print(df2)逻辑说明列名和行名本质是向量的 names 属性直接赋值即可。注意 rownames 赋值时长度必须匹配否则报错。把 id 列设为行名后删除原列是数据清洗中常用的索引方式。参数说明NULL 赋值可以删除整个列df$id - NULL 是删除列的快捷方式。5.3 length、seq、rep、cut、pretty 的组合用法length(x) 获取元素个数seq(from, to, by) 生成等差数列注意 by 可以是负数用于倒序生成rep(x, n) 将整个向量重复 n 次如果要重复每个元素需要用 times 参数或 each 参数。cut(x, n) 将连续变量分割为因子默认生成的是因子类型后续分析中可能需要用 as.numeric() 转换。pretty(x, n) 创建美观的间隔点经常用于绘图坐标轴的刻度设置。# 序列生成和重复的组合使用 # 从 0 到 1 间隔 0.2 print(seq(0, 1, by 0.2)) # 重复整个向量 n 次 print(rep(c(A, B), times 3)) # 重复每个元素各 n 次 print(rep(c(A, B), each 3)) # cut 将连续变量分箱 values - c(1, 5, 9, 15, 22, 30) bins - cut(values, breaks 3) print(bins) print(levels(bins))逻辑说明seq 的 by 参数决定步长可以是小数rep 的 times 重复整个向量each 重复每个元素后再进入下一个元素cut 的 breaks 参数可以是数字表示分箱数量也可以是向量指定断点。参数说明cut 返回因子类型可以用 labels FALSE 直接返回整数索引。5.4 避坑三个容易翻车的小细节坑一sep 和 seq 混淆导致报错现象照着笔记敲代码把 seq(1, 10, by 2) 写成了 sep(1, 10, by 2)提示找不到函数。原因sep 是 paste 里的分隔符参数不是函数名文档中出现的 sep(fom,to,by) 可能是 OCR 识别错误正确函数名是 seq。解决统一使用 seq(from, to, by) 写法不要被资料中的笔误干扰。坑二scale 函数的 center 和 scale 参数带引号现象调用 scale(df, center TRUE, scale TRUE) 后结果不正确数据没有被中心化。原因center 和 scale 是逻辑参数应该写 TRUE 或 FALSE如果写成字符串 TRUE 会被当作字符向量处理函数行为异常。解决始终写 scale(df, center TRUE, scale TRUE)不写引号。这个错误在从 Excel 或其他语言转过来的用户中非常常见。坑三paste 默认空格分隔导致输出与预期不一致现象paste(file, 2024) 输出 file 2024 而不是 file2024。原因paste 默认 sep 参数为空格而很多人潜意识认为拼接就是无缝连接。解决需要无缝拼接时使用 paste0()或显式指定 sep 。另一个相关坑是 paste 处理向量时如果忘了 collapse 参数会输出多个元素而不是一个合并字符串导致后续匹配失败。6. 现学现用的落地技巧用这套函数做一份完整的数据描述报告掌握了函数不等于会做分析关键是要能把函数组合起来处理真实场景。这里给一个可以直接套用的组合模式读取一份数据后用统计函数算描述性指标用字符函数清洗列名用概率函数生成模拟数据验证分析流程最后用 seq 和 cut 完成分箱可视化。# 模拟 100 个服从正态分布的观测值 set.seed(42) scores - rnorm(100, mean 75, sd 10) # 基础描述性统计 summary_stats - c( mean mean(scores), median median(scores), sd sd(scores), min min(scores), max max(scores) ) print(round(summary_stats, 2)) # 分位数 print(quantile(scores, probs c(0.05, 0.25, 0.75, 0.95))) # 分箱并统计频数 bins - cut(scores, breaks seq(40, 110, by 10)) print(table(bins)) # 中心化后求各列均值验证为 0 df_scores - data.frame(scores) scaled - scale(df_scores, center TRUE, scale TRUE) print(colMeans(scaled))逻辑说明set.seed 保障结果可复现rnorm 生成模拟数据mean、median、sd、min、max 组合成一个命名向量输出quantile 用于观察分布尾部cut 配合 seq 将分数分成 40-50、50-60 等区间scale 中心化后列均值接近 0用于验证代码正确性。参数说明rnorm 的 n 是样本量mean 和 sd 是正态分布参数colMeans 对数据框或矩阵按列求均值。这个组合之所以好用是因为它覆盖了数据分析最常用的五个环节生成数据、描述分布、观察分位数、分箱统计、验证标准化效果。拿到任何一份连续型数值数据都可以把这套流程直接跑一遍得到的结果就是一份基础数据体检报告。如果这份 PDF 里能扩展我会建议补充三块一是数据导入相关的 read.csv 和 read.table 的参数说明尤其是 header、stringsAsFactors、fileEncoding 这三个参数二是 apply 系列函数包括 apply、lapply、sapply 的返回类型区别这是从入门到进阶的分水岭三是日期处理 like as.Date 和 format 的组合用法。这三块是真实工作中每天都会碰到的前两块甚至比概率函数中的某些冷门分布更常用。说到底R 的学习路径永远不是从头到尾背函数名而是把这份清单当作地图遇到问题按图索骥查完即用用完即忘。从那以后我每次给人讲 R 的基础操作都会强制先让他们过一遍这份函数清单标注出自己不懂的类别然后拿模拟数据跑完这一整套流程。确认没报错后再开始正式数据分析。这个过程能过滤掉八成的基础错误希望帮到你。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询