跳转至

R 语言

1748 个字 16 行代码 预计阅读时间 7 分钟


[toc]

基本语法

变量定义:a <- "Hello, world!"

打印:print(a),打印多个变量时使用cat(a,b,c)

索引:从 1 开始,首尾都包含

注释:#test

R 不支持多行注释,但可以使用 if(FALSE) 语句注释

获取包含 R 包的库位置:.libPaths()

获取已安装的所有软件包列表:library()

重要范例

Rstudio 用法

ctrl+1 光标移动到 source

ctrl+2 光标移动到 console

Ctrl+L 清理控制台

command+shift+c 批量注释或取消注释

文件

读文件

data = read.csv(paste0(getwd(),'/data/data.csv'))

写文件

write.csv(data,"data/data.csv",row.names = FALSE)

字符

字符处理

paste(c("data","csv"),collapse = ".")

添加列

data[,code := gsub(x = contract, pattern = "[^/]+/([^\\./]+)\\.[^\\./]+", replacement = "\\1")]

时间戳格式转时间格式

as.POSIXct(plotData[,timestamp],origin = '1970-01-01')

数据帧

筛选

dataUSDT <- data[(grepl("\\.usdt$",contract) & exchange != 'coinbase')]

根据某列分列表

split(dataUSDT, by = 'exchange',keep.by = TRUE)

对列表元素依次操作

lapply(splitedData,function(d)unique(d$code))

计算时取本组元素

V_R_Exc <- dataUSDT[,.(
  code = code, 
  time = time,
  v_r_exc = volume/.SD[code == "btc"][['volume']]
),by = c('exchange','timestamp')]
# 按交易所和时间分组,每组的btc交易量为.SD[code == "btc"][['volume']]

排列

arrange(v_r,timestamp,-v_r) # 按照timestamp, vr降序排列

v_r <- v_r[order(timestamp, -v_r),] # 按照timestamp, vr降序排列

缺失值处理

plotData[is.na(plotData)] <- 0

plotData[,v_r:= plotData[,v_r] %>% replace(is.na(.), 0)]

创造新列使用变量内容而非变量名本身

result[,(i):=content]

绘图

横轴为时间

ggplot2::ggplot(
     data = plotData, ggplot2::aes(x = time, y = v_r, group = code, colour = code)) + 
     ggplot2::geom_line() + 
     ggplot2::scale_x_datetime(date_labels = '%Y-%m-%d', date_breaks = '3 month') + 
     ggplot2::xlab('Time') + 
     ggplot2::ggtitle(label = 'Time ~ Count', subtitle = 'subtitle') + 
     ggplot2::ylab('Count') + 
     ggplot2::theme(legend.position = "right", 
             legend.direction = "vertical", 
             axis.text.x = ggplot2::element_text(angle = 45))

保存

ggplot2::ggsave("graph/coinNumber.png")


数据类型

对象无需声明数据类型,变量定义时 R 对象的数据类型变为变量的数据类型。

返回数据类型的函数:class(a)

Vectors 向量

  • 最基本的 R 语言数据对象
  • 单元素向量
  • 即使在 R 语言中只写入一个值,它也将成为长度为 1 的向量,并且属于六类原子向量。
  • c(1) 的效果与直接写入 1 一致
  • 多元素向量
  • 对数值数据使用冒号运算符
    • v <- 3.8:11.4
    • [1] 3.8 4.8 5.8 6.8 7.8 8.8 9.8 10.8
  • 使用 sequence (Seq.) 序列运算符
    • seq(5, 9, by = 0.4)
    • [1] 5.0 5.4 5.8 6.2 6.6 7.0 7.4 7.8 8.2 8.6 9.0
  • 使用 c() 函数进行组合
    • s <- c('apple','red',5,TRUE)
    • [1] "apple" "red" "5" "TRUE",类型为 character( 会强制转换成最宽泛的类 )
  • 向量索引
  • 1 开始
  • logical 变量或 0/1 也可用于索引
  • FALSE 0 代表对应位置舍弃,索引 -x 代表第 x 项舍弃后的剩余部分
    t <- c("Sun","Mon","Tue","Wed","Thurs","Fri","Sat")
    u <- t[c(2,3,6)]
    v <- t[c(TRUE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE)]
    x <- t[c(-2,-5)]
    y <- t[c(0,0,0,0,0,0,1)]
    
    [1] "Mon" "Tue" "Fri"
    [1] "Sun" "Fri"
    [1] "Sun" "Tue" "Wed" "Fri" "Sat"
    [1] "Sun"
    
    • 向量运算
    • 加减乘除相同长度的向量
    • 若不等长,较短的向量将被循环

      v1 <- c(3,8,4,5,0,11) v2 <- c(4,11) #V2 becomes c(4,11,4,11,4,11) - 向量排序 - 可以使用sort()函数排序,有参数decreasing默认为false(默认升序) - 除数字外也可以进行字符排序

      v <- c(3,8,4,5,0,11, -9, 304) sort.result <- sort(v) revsort.result <- sort(v, decreasing = TRUE)

六类原子向量

  • logical
  • 逻辑型,真或假
  • TRUE, FALSE
  • numeric
  • 数字
  • 12.3, 5
  • integer
  • 整型
  • 2L, 0L
  • complex
  • 复数型
  • 3+2i
  • character
  • 字符
  • ‘a’, "abc", '23.4'
  • 单双引号无差异 字符和字符串无差异?
  • 字符修改函数

    gsub(x = contract, pattern = "[^/]+/([^\\./]+)\\.[^\\./]+", replacement = "\\1")] 表示形如“coinbase/btc.usdt”返回“btc” - 字符连接函数

    paste(c("btc","usdt"), collapse = ".") 表示得到“btc.usdt” - 字符判定函数

    grepl("\\.usdt",contract) 表示字符串内含有“.usdt” - raw - 原型 16进制 - "Hello" 被存储为 48 65 6c 6c 6f - v <- charToRaw("Hello")

Lists 列表

  • 列表可以包含许多不同类型的元素,如向量、函数、矩阵甚至另一个列表。
  • 列表创建
  • list1 <- list(c(2,5,3),21.3,sin)
  • 将显示的结果为:
      [[1]]   [1] 2 5 3
    
      [[2]]   [1] 21.3
    
      [[3]]   function (x)  .Primitive("sin")
    
    • 列表元素命名
    • names(list_data) <- c("1st Quarter", "A_Matrix", "A Inner list")
    • 列表元素访问
    • 元素索引访问:list_data[1]
    • 元素名称访问:list_data$A_Matrix
    • 列表元素修改
    • 增删只能在末尾,修改可以在任意位置
    • 增:list_data[4] <- "New element"
    • 删:list_data[4] <- NULL
    • 改:list_data[3] <- "updated element"
    • 列表合并
    • 将所有列表放在一个 c() 函数中
    • list <- c(list1,list2)
    • 列表转向量
    • 转为向量后可使用向量的代数运算
    • unlist() 函数,输入列表输出向量
    • v <- unlist(list1)

Metrices 矩阵

  • 二维矩形数据集,可以使用 matrix() 创建
  • 矩阵的转置:t(),用例为t(M)
  • 创建矩阵
  • 基本语法:matrix(data, nrow, ncol, byrow, dimnames)
  • 数据是成为矩阵的数据元素的输入向量
  • nrow 是要创建的行数
  • ncol 是要创建的列数
  • byrow 是一个逻辑线索。 如果为 TRUE,则输入向量元素按行排列
  • dimname 是分配给行和列的名称 ( 可选 )
    rownames = c("row1", "row2", "row3", "row4")
    colnames = c("col1", "col2", "col3")
    P <- matrix(c(3:14), nrow = 4, byrow = TRUE, dimnames = list(rownames, colnames))
    
    • 将显示的结果为:
       col1 col2 col3
      

      row1 3 4 5 row2 6 7 8 row3 9 10 11 row4 12 13 14 - 访问元素 - 访问元素:P[4,2] - 访问行/列:P[2,]P[,3] - 矩阵运算 - 参与运算的矩阵行数列数分别相等 - 结果均为逐项运算 - result <- matrix1 / matrix2

Arrays 数组

  • 数组可以有任意维度,使用一个 dim 属性创建所需的维数,向量长度不足的循环补足
  • 数组只能存储数据类型
  • 数组创建
  • a <- array(c('green','yellow'),dim = c(3,3,2))
  • 将显示的结果为:
      , , 1
    
           [,1]     [,2]     [,3]    
      [1,] "green"  "yellow" "green" 
      [2,] "yellow" "green"  "yellow"
      [3,] "green"  "yellow" "green"
    
      , , 2
    
           [,1]     [,2]     [,3]    
      [1,] "yellow" "green"  "yellow"
      [2,] "green"  "yellow" "green" 
      [3,] "yellow" "green"  "yellow"
    
    • 行列命名

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

      , , Matrix1

      COL1 COL2 COL3
      

      ROW1 5 10 13 ROW2 9 11 14 ROW3 3 12 15

      , , Matrix2

      COL1 COL2 COL3
      

      ROW1 5 10 13 ROW2 9 11 14 ROW3 3 12 15 - 元素访问 - 反正空着就是全都要 - result[3,,2] - 元素操作 - 对数组元素的操作通过访问矩阵的元素来执行

      matrix1 <- array1[,,2] matrix2 <- array2[,,2] result <- matrix1+matrix2 - 跨矩阵元素运算 - apply()函数:apply(x, margin, fun) - x是一个数组 - margin 是所使用的数据集的名称 - fun是要应用于数组元素的函数 - 例:计算所有矩阵中数组行中元素的总和 - result <- apply(testarray, c(1), sum)

Factors 因子

  • 使用向量创建的 r 对象。 它将向量与向量中元素的不同值一起存储为标签
  • 因子创建
  • 函数 factor()

    • 向量:apple_colors <- c('green','green','yellow','red','red','red','green')
    • 因子:factor_apple <- factor(apple_colors)
    • 将显示的结果为:
      [1] green  green  yellow  red   red   red   green 
      Levels: green red yellow
      
      • 函数 gl()

        • gl(n, k, length = n*k, labels = 1:n, ordered = FALSE)
        • n 是整数,级别的个数
        • k 是整数,每个级别的重复个数
        • length 为结果的长度
        • labels 为可选参数,向量因子水平的标签
        • gl(3, 2, labels = c("Tampa", "Seattle","Boston"))

        Tampa Tampa Seattle Seattle Boston Boston Levels: Tampa Seattle Boston - gl(2, 2, 20)

        [1] 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2 Levels: 1 2

  • 判定:is.factor(factor_data)

  • Factors Data Frames:在创建具有文本数据列的任何数据框时,R 语言将文本列视为分类数据并在其上创建因子
  • 指定级别顺序
  • 使用新的等级次序再次应用因子函数,改变因子中的等级顺序
  • new_order_data <- factor(factor_data,levels = c("East","West","North"))

Data Frames 数据帧

  • 表格对象,每列可以包含不同类型数据,可以是数字,因子或字符类型
  • 列名称应为非空,行名称应该唯一,每个列应包含相同数量的数据项。
  • 数据帧创建
  • 使用 data.frame() 创建
    emp.data <- data.frame(
        emp_id = c (1:5),
        emp_name = c("Rick","Dan","Michelle","Ryan","Gary"),
        salary = c(623.3,515.2,611.0,729.0,843.25),
        start_date = as.Date(c("2012-01-01","2013-09-23","2014-11-15","2014-05-11","2015-03-27")),
        stringsAsFactors = FALSE
    )
    
    • 将显示的结果为
      emp_id    emp_name     salary     start_date
      1     1     Rick        623.30     2012-01-01
      2     2     Dan         515.20     2013-09-23
      3     3     Michelle    611.00     2014-11-15
      4     4     Ryan        729.00     2014-05-11
      5     5     Gary        843.25     2015-03-27
      
      • 获取信息
      • str() 函数,可以看到行列数、列名、每列数据类型、具体数据的前若干个字符
      • summary() 函数,可以获得数据的统计摘要和性质,长度、类型、最大最小均值等
      • 数据提取
      • 按列名提取整列
        • emp.data$emp_name
        • emp.data[,"emp_name"]
        • emp.data[,c("emp_name","salary")]
      • 按数字索引提取
        • emp.data[1] 单索引默认按列提取
        • emp.data[c(3,5),c(2,4)]
        • emp.data[1:2,]
      • subset
        • subset(data,colname1 == c(name1,name2) & colname2 > 300)
      • 提取数据帧信息
        • 获取列名向量 colnames(x)
        • 获取行名向量 rownames(x)
        • 获取行数 nrow(x)
        • 获取列数 ncol(x)
      • 增删列
      • 直接用新列名修改
      • 增:emp.data$dept <- c("IT","Operations","IT","HR","Finance")
      • 删:emp.data$dept <- NULL
      • 增删行
      • 新建列数相同的新数据帧,然后使用 rbind() 函数合并
      • 增:emp.finaldata <- rbind(emp.data,emp.newdata)
      • 删除行需要向量技巧
      • emp.data <- emp.data[-c(1,3),],其中第一项为要删除的行号向量(当前第几行)

数据帧处理

数据帧合并 cbind/rbind/merge

  • cbind
    • 根据列进行合并,即叠加所有列,m 列的矩阵与 n 列的矩阵 cbind() 最后变成 m+n
    • 合并前提:cbind(a, b) 中矩阵 ab 的行数相符
  • rbind
    • 根据行进行合并,即叠加所有行,m 行的矩阵与 n 行的矩阵 rbind() 最后变成 m+n
    • 合并前提:rbind(a, b) 中矩阵 ab 的列数相符
  • merge
    • 根据列合并,m 列的矩阵与 n 列的矩阵合并至多 m+n 列,按照列名相同的列进行合并
    • merge(x, y, by = intersect(names(x), names(y)), by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all, sort = TRUE, suffixes = c(".x",".y"), no.dups = TRUE, incomparables = NULL, ...)
    • x,y 为两个数据帧,by 为作为合并根据的共同列名,all = TRUE 表示对应数据帧包含而另一数据帧不包含的行将被保留并填入 NULL
    • incomparables 表示用于比较的列上删去的值,常用 incomparables = NA
    • 若两个数据帧没有共同列,合并后将返回nrow(x)*nrow(y)行,y 的每一行信息将在每个 x 的行上重复

数据帧结构重塑 stack/unstack

  • stack
    • 将多维数据压缩为一维向量
    • stack(x, select, drop=FALSE, ...)
    • 生成的仍为 dataframe,第一列为压缩好的一维向量,第二列为对应列的标签
    • select 为要选择或者删去的列名向量
  • unstack
    • unstack(x, form, ...)
    • form 为公式类型,左侧是值,右侧是因子类型,每个水平形成一列
    • 例:unstack(x, values~ind)

data.table

创建

library(data.table)
dft <- data.table(data1,data2,data3)

data.frame 转化:dt1 <- as.data.table(df1)

互相转化:table->frame setDF(dtt) frame->table setDT(dtt)

copy():强行深复制 分配新存储地址(data.table 是浅复制只改变指针)

访问

  • 返回数据向量:dft[,colname]dft[[1,2]]
  • 返回表:dft[,"colname"]dft[1,2](均为 dataframe 的方法,在 dataframe 中返回 numeric
  • 提取行:
  • dft[1]dft[1,](返回表)
  • 把某列设为 key setkey(dft,colname),然后可以行名提取 dft["Bob",2]
  • 可以设置多个 key 便于 on 参数筛选
  • 提取列:
  • dft[,1]dft[,"colname"]dft[,list(col1,col2)]dft[,.(col1,col2)](返回表)
  • dft[,colname]dft[[3]]dft$colname(返回向量)
  • 双括号只能加数字或字符串
  • table 中默认寻找的是变量名 故字符串变量(非列名)直接找会报错,需要 with = FALSE
  • 列名修改:setnames(dft,newnames)colnames(dft)<-newnames
  • 逻辑提取
  • dft[weight>40&height<170]
  • dft[c(T,F,T,T)](列不可以)
  • dft[.("Bob",60),on=.(name1,weight)]多列查找 等价于 name1 == Bob & weight == 60
  • 增删行列
  • 删除:! -
  • 排序
    • 根据某列对行排序 dft[order(colname)]
    • 按列名将列排序并接受 setcolorder(dft,rev(names(dft)))
  • 计算
  • 参数 1:哪些行 参数 2:算什么 参数 3:分组计算
  • 计算多个 表输出 指定列名dft[,.(wm=mean(weight),ws=sum(weight))]
  • 三参数分组 dft[,mean(weight),by=height>150]
  • 合并
  • 按列名融合 dt1[dt2,on="name1"],不同列名匹配dt1[dt2,on="name1==friend"]

特殊细节

  • .N 代表行的数量 分组时代表每一组行的数量
  • .SD 代表整个数据框
  • .SDcols 指定 .SD 中包含的列
  • 多个 [] 串联连续运算 dft[weight>50][height>100][order(height)]
  • %between% %inrange%
  • dft[weight>=50&weight<=60]
  • dft[weight %between%c(50,60)]
  • dft[weight %inrange%c(50,60)]
  • %like% 字符串中含有某个字符 dft[name1%like%"a"]
  • %>% 左值发送给右表达式,并作为右表达式函数的第一个参数
  • plotData[,v_r] %>% replace(is.na(.), 0)]

table 数据接口

dataw <- data.table(a=1:10,b=2:11)
fwrite(dataw,"dataw.csv")
fwrite(dataw,"dataw.txt")
fwrite(dataw,"dataw.dat")

fread("dataw.csv")
fread(file="dataw.csv")
  • 默认第一行作为列名(header=Tcol.names 改变列名
  • nrow 控制读几行 -1 全部,0 列名。

dplyr

数据筛选

  • filter
  • 按行筛选子数据集
  • filter(data, colname1 == choice1 & colname2 == choice2)
  • select
  • 按列筛选子数据集
  • select(data, colname1:colname3)
  • select(data, starts_with("Petal")) 选取变量名前缀包含 Petal 的列
  • select(data, ends_with("Width")) 选取变量名后缀包含 Width 的列
  • select(data, -contains("etal")) 选取变量名不包含 etal 的列

数据排序

  • arrange
  • 各行按某几列依次排序
  • arrange(data,colname1,colname2,colname3) (排序重要性 1>2>3

数据变形

  • mutate
  • 直接利用已有的数据生成新变量且加在 dataframe 最后
  • mutate(data, new1 = ..., new2 = ...)
  • transform
  • 也能达到同样的效果
  • transform(data, new1 = ..., new2 = ...)
  • transmute
  • 只保留新生成的行列
  • transmute(data, new1 = ..., new2 = ...)

summerise()?


ggplot2

qplot 快速绘图

  • 散点图 qplot(x=mpg, y=wt, data=df, geom = "point")
  • 平滑曲线 qplot(x=mpg, y=wt, data = df, geom = "smooth")
  • 类似支持
  • 箱线图 boxplot
  • 小提琴图 violin
  • 点图 dotplot
  • 直方图 histogram
  • 密度图 density

ggplot

  • 本质是图层叠加,依靠 '+' 号实现,越靠后的位置图层越高
  • 起始明确从 ggplot() 开始,一个语句一幅图

初始化

载入数据空间、选择数据以及选择默认 aes(美学,需要分组调整就写在 aes 内部,否则写在外面)

p <- ggplot(data = , aes(x = , y = ))

图层绘制

geom_ stat_,绘图与统计变换

ggplot(data= NULL, aes(x = x, y = y)) +
  geom_point(color = "darkred",stat = "sum")

ggplot(data= NULL, aes(x = x, y = y)) +
  stat_sum(color = "darkred",geom = "point")

效果相同。

时间格式绘图

ggplot2::ggplot(data = plotData, ggplot2::aes(x = time, y = count, group = type, colour = type)) + 
  ggplot2::geom_line() + 
  ggplot2::scale_x_datetime(date_labels = '%Y-%m-%d', date_breaks = '3 month') + 
  ggplot2::xlab('Time') + 
  ggplot2::ggtitle(label = 'Time ~ Count', subtitle = 'subtitle') + 
  ggplot2::ylab('Count') + 
  ggplot2::theme(legend.position = "right", 
                legend.direction = "vertical", 
                axis.text.x = ggplot2::element_text(angle = 45))

保存图像

ggplot2::ggsave("graph/coinNumber.png")

指标名称及作用

  • alpha:透明度,\(0\le alpha \le 1\)
  • color:线或点的颜色,见对照表
  • fill:曲线下方的填充颜色
  • linetype:线型,如 "dashed"( 虚线 )
  • size:点的大小或线的粗细

变量

  • 变量名:字母,数字和点或下划线字符,以字母或不以数字后跟的点开头
  • 变量赋值:可以使用向左,向右和等于运算符来为变量分配值
  • 变量的数据类型:获取分配给它的 R 对象的数据类型,可以在程序中使用同一个变量时更改变量的数据类型
  • 变量查找
  • 函数 ls() 返回工作空间中当前可用的所有变量
  • 以点 (.) 开头的变量被隐藏,可以使用“all.names = TRUE”参数列出
  • 仅查找在名称中带有某个指定字符的对象,则通过设定选项 pattern( pat) 来实现
  • ls(pattern = "var")
  • 变量删除
  • 函数 rm() 删除给定变量 rm(var.1),删除多个rm(list = c("array1","array2"))
  • 组合使用 ls() rm() 可以全部删除 rm(list = ls())

函数

function_name <- function(arg_1, arg_2, ...) {
  Function body 
}
  • 传参原理:按照顺序和名称
  • 例子:含默认参数的函数

    new.function <- function(a = 3, b = 6) { result <- a * b print(result) }


运算符

算术运算符

运算符 效果
+ - * / 两向量对应位置四则运算
%% 两个向量对应位置求余
%/% 两个向量对应位置求商 ( 商与余数 )
^ 将第二向量作为第一向量对应位置的指数

关系运算符

  • 支持:<,>,<=,>=,==,!=
  • 将第一向量的每个元素与第二向量的相应元素进行比较
  • 比较的结果是布尔值向量

逻辑运算符

  • 只适用于逻辑,数字或复数类型的向量
  • 除了实部和虚部均为 0 的数字,其他数字或复数均被认为是逻辑值 TRUE
  • &:元素逻辑 AND 运算符,两向量对应位置均为 TRUE
  • |:元素逻辑 OR 运算符,两向量对应位置至少一个为 TRUE
  • &&:逻辑 AND 运算符,两个向量的第一个元素都为 TRUE 时给出 TRUE
  • ||:逻辑 OR 运算符,两个向量的第一个元素至少一个为 TRUE 时给出 TRUE
  • !:逻辑非运算符,对向量的每个元素给出相反的逻辑值

赋值运算符

  • <- = <<-:左分配,符号右侧的值赋给符号左侧
  • -> ->>:右分配,符号左侧的值赋给符号右侧

其他运算符

  • : 冒号运算符,按顺序创建一系列数字,如2:8
  • %in% 用于标识元素是否属于向量
  • %*% 将矩阵与其转置相乘(矩阵乘法)

条件和循环语句

if-else if-else 语句

if(boolean_expression 1) {
// Executes when the boolean expression 1 is true.
} else if( boolean_expression 2) {
// Executes when the boolean expression 2 is true.
} else {
// executes when none of the above condition is true.
}

switch 语句

switch(expression, case1, case2, case3....)
  • 元素未命名:switch(3,2*3,sd(1:5),runif(3))
  • 元素命名:switch("fruit", drink="water", meat = "beef", fruit = "apple", vegetable="cabbage")
  • 如果 ​expression​ 的值不是字符串,那么它被强制为整数。
  • expr 的计算结果为整数,且值在 1~case 个数之间时,则函数返回相应位置的值
  • 如果表达式求值为字符串,那么该字符串与元素的名称匹配
  • 如果有多个匹配,则返回第一个匹配元素。

while 循环

while (test_expression) {
    statement
}

repeat 循环

repeat { 
    commands 
    if(condition) {
        break
    }
}

for 循环

可以传递字符向量,逻辑向量,列表或表达式

for (变量 in 条件) {
    循环体
}

控制语句

  • break:循环立即终止,并且程序控制在循环之后的下一语句处恢复,可用于循环或 switch 语句
  • next:跳过本次迭代,并开始循环的下一次迭代

数据接口

CSV

  • 读取

    data <- read.csv("input.csv") - 写入

    write.csv(data,"output.csv")

    其中会多一列 X(row.names,可以通过命令删除

    write.csv(data,"output.csv", row.names = FALSE)

EXCEL

(需要安装包)

  • 读取

    data <- read.xlsx("input.xlsx", sheetIndex = 1)


统计函数

平均数 中位数 众数

  • 平均数

    mean(x, trim = 0, na.rm = FALSE, …)

x 为待求向量,\(0\le trim \le 0.5\) 表示去掉最大最小值的比例,na.rm = TRUE 意味着去除 NA 值。 - 中位数

  median(x, na.rm = FALSE)
  • 众数

    result <- getmode(x)

众数可以是数字也可以是字符

回归

  • 一元线性回归
  • 回归 relation <- lm(y~x)
  • 预测 result <- predict(relation,data)
  • 多元线性回归
  • 回归 model = lm(y ~ x1+x2+x3..., data = input)
  • 预测 用法一致
  • 逻辑回归
  • 回归 model = glm(formula = y ~ x1+x2+x3..., data = input, family = binomial)
  • 最小二乘
  • 回归 model <- nls(yvalues ~ b1*xvalues^2+b2,start = list(b1 = 1,b2 = 3))
  • 第一项为公式,第二项为 data( ),第三项为初始参数值

分布

  • 正态分布
  • dnorm() 概率分布 y <- dnorm(x, mean = 2.5, sd = 0.5)
  • pnorm() 累积分布 y <- pnorm(x, mean = 2.5, sd = 2)
  • rnorm() 正态随机数 y <- rnorm(50)
  • 二项分布
  • dbinom(x, size, prob)
  • pbinom(x, size, prob)
  • rbinom(n, size, prob)

分析

  • 协方差分析

    result1 <- aov(mpg~hp*am,data = input) result2 <- aov(mpg~hp+am,data = input) anova(result1,result2)

aov 为方差分析 anova 为协方差分析

  • 时间序列分析
  • 函数原型 timeseries.object.name <- ts(data, start, end, frequency)
  • 后三个参数可选,frequency 为单位时间内采样频率,12 为月频,4 为季频,6 10min24*6 为一天中固定的 10min 频率采样

    rainfall.timeseries <- ts(rainfall,start = c(2012,1),frequency = 12)
    
  • 卡方检验

  • 确定两个分类变量之间是否存在显著相关性
  • chisq.test(data)
  • data 为表类型的数据,结果显示 p 值小于 0.05 则相关

高级功能

  • 决策树
  • 需要安装包 install.packages("party")
  • 函数原型 ctree(formula, data)
  • 图像 plot(model.tree)
  • 随机森林
  • 需要安装包 install.packages("randomForest")
  • 函数原型 randomForest(formula, data)
  • 生存分析
  • 预测特定时间发生的时间
  • 需要安装包 install.packages("survival")
  • survfit(Surv(time,event)~1)