本节内容可应用在数据读取之后。包括基本的运算(包括统计函数)、数据重整(排序、合并、子集、随机抽样、整合、重塑等)、字符串处理、异常值(NA/Inf/NaN)处理等内容。也包括 apply() 这种函数式编程函数的使用。
数学函数
数学运算符和一些统计学上需要的函数。
数学运算符
四则
幂运算
求余
整除
+, -, *, /
^ 或 **
%%
%/%
例子:
a
[1] 8 1 2
基本数学函数
绝对值:abs()
平方根:sqrt()
三角函数:sin(), cos(), tan(), acos(), asin(), atan()
对数:
log(x, base=n) 以 n 为底 x 的对数
log10(x) 以 10 为底的对数
指数:exp()
取整:
向上取整 ceiling()
向下取整 floor()
舍尾取整(绝对值减小) trunc()
四舍五入到第 N 位 round(x, digits=N)
四舍五入为有效数字共 N 位 singif(x, digits=N)
统计、概率与随机数
描述性统计等更多的统计内容,参考 “描述性统计”一文。
统计函数
常用的统计函数:
均值:mean()
中位数:median()
标准差:sd()
方差:var()
绝对中位差:mad(x, center=median(x), constant=1.4826, …),计算式:
\[\mathrm{mad}(x) = constant * \mathrm{Median}(|x - center|)\]
分位数:quantile(x, probs),例如 quantile(x, c(.3, 84%)) 返回 x 的 30% 和 84% 分位数。
极值:min() & max()
值域与极差:range(x),例如 range(c(1, 2, 3)) 结果为 c(1, 3)。极差用 diff(range(x))
差分:diff(x, lag=1)。可以用 lag 指定滞后项的个数,默认 1
标准化:scale(x, center=TRUE, scale=TRUE)。可以使用 scale(x) * SD + C 来获得标准差为 SD、均值为 C 的标准化结果。
概率函数
常用的概率分布函数:
正态分布:norm
泊松分布:pois
均匀分布:unif
Beta 分布:beta
二项分布:binom
柯西分布:cauchy
卡方分布:chisq
指数分布:exp
F 分布:f
t 分布:t
Gamma 分布:gamma
几何分布:geom
超几何分布:hyper
对数正态分布:lnorm
Logistic 分布:logis
多项分布:multinom
负二项分布:nbinom
以上各概率函数的缩写记为 abbr, 那么对应的概率函数有:
密度函数: d{abbr}(),例如对于正态就是 dnorm()
分布函数:p{abbr}()
分位数函数:q{abbr}()
生成随机数:r{abbr}(),例如常用的 runif() 生成均匀分布
例子
通过 runif() 产生 $[0, 1]$ 上的服从均匀分布的伪随机数列。通过 set.seed() 可以指定随机数种子,使得代码可以重现。不过作用域只有跟随其后的那个随机数函数。
set.seed(123)print(runif(3))
[1] 0.2875775 0.7883051 0.4089769
# 位于 1.96 左侧的标准正态分布曲线下方的面积pnorm(1.96)
0.97500210485178
# 均值为500,标准差为100 的正态分布的0.9 分位点qnorm(.9,mean=500,sd=100)
628.15515655446
# 生成 3 个均值为50,标准差为10 的正态随机数set.seed(123)print(rnorm(3,mean=50,sd=10))
[1] 44.39524 47.69823 65.58708
数据框操作
数据框是最常使用的数据类型。下面给出数据框使用中一些实用的场景,以及解决方案。
行、列操作
新建
创建一个新的列(变量)是很常见的操作。比如我们现在有数据框 df ,想要在右侧新建一个列,使其等于左侧两列的和。
df=data.frame(x1=c(1,3,5),x2=c(2,4