加载常用的包

library(tidyverse)
library(readxl)
library(openxlsx)
library(lubridate)

1 R基础相关

1.1 基础命令

1.1.1 set_names命令

set_names()命令可以很方便的创建带名称的向量,set_names(x, nm = x, ...)其中x表示需要赋名的变量,nm表示向量的名称,示例:

set_names(1:4, letters[1:4])
# a b c d 
# 1 2 3 4

1.1.2 交集并集

interesect()求交集,union()并集,setdiff()补,结果如图1.1

R集合运算命令

图1.1: R集合运算命令

1.2 数学公式测试

行内公式\(x^2+y^2=z^2\)

行间公式:\[f(x)=ax+b\]

1.3 逻辑运算符号

R中基础逻辑运算符号有(=;!=;>;<;>=;<=),返回的值是truefalse,也可分别作为为数字10进行数学运算:

x <- c(1, 2, 3, 4, 5, 6)
x > 3
# [1] FALSE FALSE FALSE  TRUE  TRUE  TRUE
sum(x > 3)
# [1] 3

1.4 数学运算

  • %% 两个向量求余
x <- c(1, 2, 3)
y <- c(4, 5, 6)
y%%x
# [1] 0 1 0
  • %/% 两个向量相除求商
x <- c(1, 2, 3)
y <- c(4, 5, 6)
y%/%x
# [1] 4 2 2
  • %*% 两个向量的内积,也称为点乘,可用于矩阵

    • 对于向量
x <- c(1, 2, 3)
y <- c(4, 5, 6)
y %*% x
#      [,1]
# [1,]   32
  • 对于矩阵
m <- matrix(c(1:4), ncol = 2)
m %*% m
#      [,1] [,2]
# [1,]    7   15
# [2,]   10   22

1.5 向量操作

增加向量元素的几种操作

  • 直接使用c()
x <- c(1, 2, 3)
newvalues <- 4:9
c(x, newvalues)
# [1] 1 2 3 4 5 6 7 8 9
  • 在末尾添加
x <- c(1, 2, 3)
x[length(x) + 1] <- 99
x
# [1]  1  2  3 99
  • 在指定位置增加append(VEC, newvalues, after = N)
x <- c(1, 2, 3)
newvalues <- c(55, 66, 77)
append(x, newvalues, 2)
# [1]  1  2 55 66 77  3

1.6 [][[]]取值的区别,[[]]等价与$取元素:

x <- c(1, 2, 3)
x[1]
# [1] 1
x[[1]]
# [1] 1
lsx <- list(name = c("tom", "jimy", "tod"), score = c(98, 80, 95))
lsx[2][1]
# $score
# [1] 98 80 95
lsx[[2]][1]
# [1] 98
lsx$score[1]
# [1] 98

1.7 list的一些操作和理解

list作为特殊的变量,它可以存储任意类型的数据,包括其他的list,也就是列表列。R中列表的高端操作有些抽象,不太好理解,需要自己动手多操作。

1.8 print()cat()的区别

主要是输出内容的形式,直观来说cat()输入的内容更复核自然阅读的习惯,而print()输入的内容更类似程序的语法结构

1.8.1 这是print()输出的结果

print(c("hello", "world", "!"))
# [1] "hello" "world" "!"

1.8.2 这是cat()输出的结果

cat(c("hello", "world", "!"))
# hello world !

1.9 创建序列的区别

使用:创建的都是整数序列,使用seq()创建的序列是double

a <- 1:10
b <- seq(from = 1, to = 10, by = 1)
identical(a, b)
# [1] FALSE

2 统计分析相关

2.1 概率

  • R中有关概率分布相关函数(2.1
表2.1: 正态分布相关函数用法
函数 功能
dnorm(x, mean = 0, sd = 1, log = FALSE) 返回值正态分布概率密度函数值,比如dnorm(z)表示:标准正态分布密度函\(f(x)\)在x=z处的函数值。
pnorm(q, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE) 返回值是正态分布的分布函数值,比如pnorm(z)等价于\(P[X ≤ z]\)
qnorm(p, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE) 返回值是给定概率p后的下分位点.
rnorm(n, mean = 0, sd = 1) 返回值是n个正态分布随机数构成的向量。
  • 其他概率分布(2.2),其命令用法与正态分布函数类似。
表2.2: R中其他概率分布相关函数
概率分布 R 命令名 参数
Beta beta shape1; shape2
Cauchy cauchy location; scale
Chi-squared (Chisquare) chisq df = degrees of freedom
Exponential exp rate
F f df1 and df2 = degrees of freedom
Gamma gamma rate; either rate or scale
Log-normal (Lognormal) lnorm meanlog = mean on logarithmic scale; sdlog = standard deviation on logarithmic scale
Logistic logis location; scale
Normal norm mean; sd = standard deviation
Student’s t (TDist) t df = degrees of freedom
Uniform unif min = lower limit; max = upper limit
Weibull weibull shape; scale
Wilcoxon wilcox m = number of observations in first sample; n = number of observations in second sample

2.2 基础统计

  • sd()var()分别计算标准差和方差
x <- runif(20)
y <- 2 * (x + 1)
sd(x)
# [1] 0.332
var(x)
# [1] 0.11
  • cor()cov()函数可以分别计算两个向量之间的相关性和协方差:
cor(x, y)
# [1] 1
cov(x, y)
# [1] 0.22

2.3 线性回归

  • 线性回归语法lm()

2.3.1 一简单线性模型

lm(y ~ x1 + x2, date = sim)

对应建模公式为:\[y=\alpha+\beta_1x_1+\beta_2x_2+\varepsilon\]

2.3.2 交互变量性模型

lm(y ~ x1 * x2, date = sim)

对应建模公式为:\[y=\alpha+\beta_1x_1+\beta_2x_2++\beta_3x_1x_2+\varepsilon\]

2.3.3 虚拟变量

lm(y ~ x1 + x1:x2, date = sim)

对应建模公式为:\[y=\alpha+\beta_1x_1+\beta_2x_1x_2+\varepsilon\]

3 rmarkdown相关

3.1 表格

  • kable()
knitr::kable(head(mtcars))
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.62 16.5 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.88 17.0 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.21 19.4 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1
  • 除了kable()命令生成表格外,其他的表格生成如果要使其能被交叉引用,需要添加标签label,如:Table:(\#tab:yourlabel)Caption,然后使用\@ref(tab:label) 。例如:

样本身高体重见表3.1

Table:(\#tab:table001)A simple table

left  | center | right
:-----|:------:|------:
A     |   180  | 60
B     |   160  | 50
c     |   170  | 30        
表3.1: A simple table
left center right
A 180 60
B 160 50
c 170 30

3.2 图片

微信截图的图片不能被knit正确读取,会提示找不到文件,需要更改文件类型或者名字?

4 R对Excel的操作

Excel是平实工作中用得最多的存储数据文件,有时候会牵涉合并、汇总等等操作。使用R的一些包能非常方便的批量操作Excel文件。 ## 读取Excel

推荐使用opnexlsxreadxl包,常用的有以下操作

  • excel_sheets()可以获取工作簿的名称
  • list.dirs(), 获取文件夹名,fullname = T获取带完整路径的名称
  • list.files(),获取文件目录中所有文件名称,同样有fullname参数。
  • read_excel读取不同版本Excel文件。read.xlsx其中detectDates参数在读取含有日期变量的文件时非常有用。
test <- read.xlsx("data/testdata.xlsx", detectDates = T)
read.xlsx("data/testdata.xlsx", detectDates = F)
#   name birthdata age group  Time
# 1   aa     37157  20     A 44361
# 2   bb     38960  15     A 44575
# 3   cc     37887  18     B 44379
# 4   dd     38367  17     A 44480
# 5   ee     40254  12     B 44416
# 6   ff     43741   2     C 44568
# 7   gg     39348  14     B 44513
# 8   hh     39847  13     C 44316
# 9   ii     39223  15     C 44438
test %>%
    mutate(Time2 = as.Date(Time, origin = "1899-12-30 00:00:00"))
#   name  birthdata age group  Time      Time2
# 1   aa 2001-09-23  20     A 44361 2021-06-13
# 2   bb 2006-08-31  15     A 44575 2022-01-13
# 3   cc 2003-09-23  18     B 44379 2021-07-01
# 4   dd 2005-01-15  17     A 44480 2021-10-11
# 5   ee 2010-03-17  12     B 44416 2021-08-07
# 6   ff 2019-10-03   2     C 44568 2022-01-06
# 7   gg 2007-09-23  14     B 44513 2021-11-12
# 8   hh 2009-02-03  13     C 44316 2021-04-29
# 9   ii 2007-05-21  15     C 44438 2021-08-29

5 shinyapp相关