【R数据分析-基础】

R语言介绍

为什么使用R?

R:数据分析与可视化平台

R的获取和安装

http://cran.r-project.org 免费下载

一、R、Rtools安装

R语言:

  • 免费开源

  • 支持多平台,包括Windows、UNIX、Mac OS

  • 擅长统计与可视化

Rtools:R语言辅助工具

安装:https://blog.csdn.net/Xingchen0101/article/details/126047772

二、Rstudio安装

Rstudio:R语言的集成开发环境(IDE)

安装:https://blog.csdn.net/Xingchen0101/article/details/126047772

三、配置Rtools路径

方法一:https://blog.csdn.net/Xingchen0101/article/details/126047772

方法二:

# 配置
install.packages('installr')
library(installr)
install.Rtools()

# 测试
Sys.which("make")
install.packages('devtools')

四、Rstudio介绍

  • R版本选择

  • R镜像配置

chooseCRANmirror()
chooseBioCmirror()
  • Rstudio窗口、功能了解

  • 脚本运行方式:单行运行、选中运行、整体运行

  • 脚本注释

  • 脚本创建和保存

  • 用Rproject管理项目

五、创建新变量

变量名 <- 表达式

a <- 1+1
b <- 10-9

常用算术运算符

+
-
*
/
^或**求幂
x%%y求余(x mod y)5%%2的结果为1
x%/%y整数除法 5%/%2的结果为2
课后小结-快捷键

运行:Windows是Atrl + Enter,Mac是Cmd + Enter

赋值号:Alt + -

注释:Ctrl+Shift+C

保存:Ctrl + S

清空控制台:Ctrl + L

一、R包介绍

R包是R函数、数据集、帮助文档等的集合。计算机上存储包的目录称为库(library)。R自带了一系列默认包(包括base、datasets等),它们提供了种类繁多的默认函数和数据集。

其他R包可通过下载来进行安装,不同的R包都有各自特定的功能。

R包网址:

CRAN清华镜像网址 https://mirrors.tuna.tsinghua.edu.cn/CRAN/

Bioconductor官网 https://www.bioconductor.org/packages/release/BiocViews.html#___Software

Github网址 https://github.com/lijian13/rinds【rinds包】

二、R包安装

# 清除对象
rm(list = ls())

# 直接安装包
install.packages("BiocManager")
install.packages('devtools')
install.packages('ggpubr')

# 从Bioconductor安装
BiocManager::install("clusterProfiler")

# 从Github上安装
devtools::install_github('lijian13/rinds') #前为用户名,后为包名
# 需要连接外网下载

# 从本地安装
devtools::install_local("D:/Shortcut/Desktop/A3_1.0.0.tar.gz")
包的两种调用方法

方法一:加载到环境中,包中的所有命令可以直接调用

library(BiocManager)

install( "clusterProfiler")

方法二:一次性调用,只能运行一个命令,包中的其他命令不可以直接调用

BiocManager::install( "clusterProfiler")

检验是否安装成功

方法一:加载包 library(ggpubr)

方法二:Rstudio里查看

一个包的安装思路

直接安装包—从Bioconductor安装—从Github上安装—从网站下载XX.tar.gz文件,从本地安装

三、R包操作

# 加载包
library(ggpubr)
require(ggpubr)

# 从环境中去除加载的R包
detach("package:ggpubr")

# 删除包
remove.packages("ggpubr")

# 更新包
update.packages()

四、R包查看

# 查看已经安装的包
installed.packages()
library()

# 查看环境中已经加载的包
search()

# 查看包的安装位置
.libPaths()

# 更改包的安装位置
.libPaths(new = "D:/新的/路径") 
# 注意R里的路径是左斜杠

# 查看包的帮助信息
help(package="ggplot2")

# 列出R包中包含的所有数据集
data(package="ggplot2")

# R包版本查询
packageVersion("ggplot2")

五、看懂控制台输出信息

类型控制台输出做法
运行结果

命令运行结束
报错Error

命令运行失败,检查问题
警告:Warning

一般可忽略
命令正在运行

等待或者中断运行
命令不完整

按esc键退出,或者补全命令
询问选择

【a/s/n】先n,不行再a;【yes/no】先no,不行再yes
没输出

命令已成功运行
课后小结

安装R包时需要加双引号"package_name",或者单引号'package_name',加载R包时不需要,引号是英文状态下的引号。

一条命令更新所有R包

install.packages("rvcheck") 
library(rvcheck) 
# 检查R版本
rvcheck::check_r()
# 更新所有R包
rvcheck::update_all(check_R=FALSE,which=c("CRAN","BioC","github"))

R的使用

(1)R区分大小写

(2)R语句是由函数和赋值构成的;R的赋值符号<

(3)工作空间

getwd()#查看当前的工作目录

setwd()#设定当前的工作目录,括号内有引号

(4)R中的路径都要用正斜杠/

(5)文本输入:函数source("")#此脚本必须要在当前工作目录下

(6)包的安装 install.packages("")

包的更新 update.packages("")

(7)包的载入  library()#不需要引号

数据类型与数据结构—初识与类型判断

数据类型判断

class()函数用于查看数据类型,用法是class(变量名)

注意事项
  • 括号是英文状态下的

  • 变量名不用加引号

  • TRUE和FALSE的全写或简写形式都要大写

对象(object)

对象:是指可以赋值给变量的任何事物,包括常量、数据结构、函数,甚至图形。(赋值号右侧内容)

对象名称:必须以字母开头,并且只能包含字母、数字、_ 和 . (赋值号左侧内容)

2.R语言:创建数据集

向量、因子、矩阵、数据框以及列表

摘自《R语言实战》

# 向量
v1 <- c(1,5,3,3);v1
v2 <- c("A","B","C","D");v2
v3 <- c(TRUE,TRUE,FALSE,FALSE);v3

# 矩阵
mat <- matrix(1:20,nrow=5,ncol=4)
mat

# 数组
ar <- array(1:24,c(2,4,3))
ar

# 数据框
df <- data.frame(v1,v2,v3)
df

# 列表
list1 <- list(v1,v2,v3,df)
list1
数据结构判断

class()函数也可用于判断数据结构

class(v1)
class(mat)
class(ar)
class(df)
class(list1)

 

向量:用函数c()创建

  • 单个向量中的数据必须拥有相同的类型或模式

  • (数值型、字符型或逻辑型)

  • 方括号:我们可以访问向量中的特定元素

#创建变量

a <- c(1, 2, 5, 3, 6, -2, 4) 

b <- c("one", "two", "three") 

c <- c(TRUE, TRUE, TRUE, FALSE, TRUE, FALSE)

#使用中括号访问元素

a <- c(1, 2, 5, 3, 6, -2, 4)

a[3]

a[c(1, 3, 5)]

a[2:6]

向量(vector)是用于存储数值型、字符型、逻辑型数据的一维数组。

向量创建

普通向量 c()
c(1,5,3,3) #数值型向量
c("A","B","C","D") # 字符型向量
c(TRUE,TRUE,FALSE,FALSE) # 逻辑型向量
2:6 # 连续整数型向量的快捷创建
重复型 rep()

参数each指定每个元素重复几次,参数times指定整个向量重复几次,each优先于times。

rep("a", times = 3)
rep(c(a,b), times = 3)
rep(c(1,6), each = 3)
rep(c(1,6),times=4,each=2)
序列型 seq()

参数by指定步长,参数length.out指定产生的元素个数

seq(from = 1, to = 3, by = 0.3)
seq(from = 10, to = 1, by = -1)
seq(1, 3, length.out = 10)
数据类型自动转换

优先次序:字符型>数值型>逻辑型

c("m",2)
c("m",TRUE)
c(2,FALSE)
注意事项
  • 单个向量内部必须具有相同的数据类型(数值型、字符型、逻辑型)

  • 标量是只含有一个元素的向量,它们用于保存常量。

向量索引

x <- 11:20
x[2]
x[c(2,4,5)]
x[2:5]
x[-c(2,5)]
x[-(2:5)]

修改向量中部分元素

x[c(2,4,5)] <- c(2,4,5)
x

理解向量化运算

weight <- c(68,72,57,90,65,81)
height <- c(175,180,165,190,172,181)
bizhi <- weight/height

# 向量化运算的自动补齐
a <- 1:5
b <- 1:3
a+b
课后小结

?函数名:查看函数的帮助。如?rep()

 

矩阵(matrix)

是由相同数据类型的元素构成的二维数组,数据类型为数值型、字符型或逻辑型。

矩阵:函数matrix()创建

矩阵下标的使用

矩阵创建

data1 <- 1:12
rnames <- c('A','B','C')
cnames <- c('V1','V2','V3','V4')

# 按列排列(默认)
mat1 <- matrix(data = data1, nrow = 3, ncol = 4, byrow = F,
                       dimnames = list(rnames,cnames))
mat1
# 按行排列
mat2 <- matrix(data = data1, nrow = 3, ncol = 4, byrow = T,
              dimnames = list(rnames,cnames))
mat2

data2 <- 1:8
mat3 <- matrix(data = data2, nrow = 2)
mat3

mat4 <- matrix(data = data2, nrow = 4)
mat4

矩阵索引

# 取出矩阵的第一行
mat1[1,]
# 取出矩阵的第一列
mat1[,1]
# 取出矩阵第2列的第1-3个元素
mat1[1:3,2]

矩阵运算

# 矩阵转置
t(mat1)

# 矩阵加法
mat1 + mat2

# 矩阵相乘(要求“第一个矩阵列数”等于“第二个矩阵行数”)
mat3 %*% mat4

# 取矩阵对角线上的值
diag(mat1)

# 求方阵逆矩阵
solve(mat3[,1:2])

# 求方阵的行列式
det(mat3[,1:2])

矩阵函数

# 求矩阵列求和、求平均
colSums(mat1)
colMeans(mat1)

# 求矩阵行求和、求平均
rowSums(mat1)
rowMeans(mat1)
拓展

注意矩阵中只能有一种数据类型,只要有一个元素为字符型,则其他元素都会是字符型。

有时在采用矩阵进行数值运算时,可能会因为掺入了字符型数据而报错,这时要对矩阵的数据类型进行排查。

数组 & 列表—创建、索引

数据框可通过函数data.frame()创建

  • mydata$A:记号$是被用来选取一个给定数据框中的某个特定变量

  • 在每个变量名前都键入一次mydata$很麻烦

  • 可以联合使用函数attach()和detach()或单独使用函数with()来简化代码

  • 函数attach()可将数据框添加到R的搜索路径中

  • 函数attach()可将数据框添加到R的搜索路径中

  • 函数detach()将数据框从搜索路径中移除

数组

数组(array)与矩阵类似,数组中的数据类型也只能有一种,但是维数可以大于2。

两种创建方式。

数组创建
# 方式一
ary1 <- array(data = 1:24)
dim(ary1) <- c(3,4,2)
ary1

# 方式二
dim1 <- c('A1','A2','A3')
dim2 <- c('B1','B2','B3','B4')
dim3 <- c('C1','C2')

ary2 <- array(data = 1:24,dim = c(3,4,2),dimnames = list(dim1,dim2,dim3))
ary2
数组索引
ary2[2,3,1] 

列表

列表(list)是一种最复杂的数据结构,它可以由不同的对象混合构成。列表中的对象可以是向量、矩阵、数组、数据框以及列表本身。

列表创建
a <- 1:10
b <- c("one","two","three")
c <- matrix(1:8,nrow = 2)
d <- array(1:18,c(2,3,3))
list1 <- list(A=a,B=b,C=c,D=d)
list1
列表索引
# 方法一
list1$B
# 方法二
list1[[2]]
拓展
  • 数据框中要求每个列向量的长度相同,而列表没有要求,所以当多个向量的长度不等时通常用列表存储。

  • R中函数的返回结果中通常包含了不同的对象,因而也常用列表存储。

逻辑运算符&数据类型转换

逻辑运算符

运算符描述
<小于
<=小于或等于
>大于
>=大于或等于
==等于
!=不等于
!x非x
x|yx或y
x&yx和y
all()全部为真则为真
any()至少一个为真则为真
用法示例
8>5
8==5
8!=5

v <- 1:10

# 判断向量中的数是否大于5
v>5
# 取出向量中大于5的数
v[v>5]
# 取出向量中不等于5的数
v[v!=5]
# 取出向量中不大于5的数
v[!v>5]

x <- -5
y <- 5

# 判断x和y是否大于0
x>0 & y>0
# 判断x或y是否大于0
x>0 | y>0

# 都满足条件才为真
all(c(x,y)>0)
# 任一个满足条件就为真
any(c(x,y)>0)
错误示范
# 判断x和y是否大于0
x&y >0

数据类型判断与转换

判断转换
is.numeric()as.numeric()
is.character()as.character()
is.logical()as.logical()
is.vector()as.vector()
is.matrix()as.matrix()
is.array()as.array()
is.list()as.list()
is.data.frame()as.data.frame()
is.factor()as.factor()
用法示例
x <- c(TRUE,FALSE,TRUE)
is.logical(x)
x
x <- as.numeric(x)
is.numeric(x)
x
x <- as.character(x)
is.character(x)
x
小贴士

可以通过()指定逻辑运算优先级,()内优先运算。

R中实用函数汇总

长度函数

# 求向量长度,即向量中元素个数
length(c(1,3,5,6,7)) 
# 计算字符串的长度
nchar("abcdef")

判断重复/独特的函数

x <- c(20,40,60,60,80,100,20)
# 去重复,留下向量中独特的元素
unique(x) 
# 判断元素值是否重复,第一次出现均为FALSE
duplicated(x) 
# 重复次数统计
table(x) 

判断是否等同的函数

# identical()不仅要求两个向量的内容一致,而且要求两个向量的里面元素的顺序是一致的
identical(c(2,4),c(4,2))
identical(c(2,4),c(2,4))

排序函数

x <- c(200,600,800,400,100)
# 返回排序后的向量
sort(x,decreasing = F)
# 返回排序需要的索引
id <- order(x,decreasing = F)
x[id]
# 返回在所有数值中的排名(从小到大)
rank(x)

匹配函数

x <- c(1,2,3,4,5)
y <- c(4,5,6,7,8,9)
# 判断x的元素,是否能匹配上y的任意一个元素
x%in%y
# 判断x的元素匹配上了y的第几个元素
match(x,y)
# 判断x中满足条件的元素对应的坐标
which(x>3)

集合函数

x <- c(1,2,3,4,5,6)
y <- c(4,5,6,7,8,9)
# 求交集
intersect(x,y)
# 求并集
union(x,y)
# 求差集
setdiff(x,y)
setdiff(y,x)

常用统计函数

函数举例描述
mean(x)mean(c(1,5,10,15))平均数
median(x)median(c(1,5,10,15))中位数
sd(x)sd(c(1,5,10,15))标准差
var(x)var(c(1,5,10,15))方差
range(x)range(c(1,5,10,15))求值域
sum(x)sum(c(1,5,10,15))求和
min(x)min(c(1,5,10,15))求最小值
max(x)max(c(1,5,10,15))求最大值
abs(x)abs(c(-2,3,-4,5))绝对值
sqrt(x)sqrt(c(1,5,10,15))平方根
log(x)log(c(1,5,10,15))求对数
quantile(x,probs)quantile(x=1:100,probs=c(0,0.5,0.8,1))求分位数,其中probs可以是向量

数据框基础

数据框是一种二维的数据结构,行表示观测/记录,列表示变量/指标/字段。数据框不同列的数据类型可以不同,但同一列的数据类型要相同,所有列的长度要相同。

数据框创建

ID <- 1:6
grade <- c(1,2,4,3,6,5)
subject <- c("Math","English","Chinese","History","Biology","Chemistry")
score <- c(90,95,92,88,97,91)
df <- data.frame(ID,grade,subject,score)

数据框索引、修改

# 位置方式
df[1,3]
df[,c(1,3)]
df[1:3,2]
# $方式
df$subject
# 名称方式
df[,'subject']
# 交互式修改
df2=edit(df) # edit不改变原始数据
fix(df) # fix改变原始数据

数据框添加、删除变量

# 加载R包中数据集
data("iris")
# 添加变量
iris2 <- transform(iris,variable=Petal.Length*Petal.Width)
# 删除变量
iris2[,-6]
iris2$Species <- NULL

数据框去重复

# 保留每种花的第一个记录
iris3 <- iris[!duplicated(iris$Species),]

数据框排序

# 行按照花萼长度从小到大的次序排
iris2 <- iris[order(iris$Sepal.Length,decreasing = F),]

常用函数

names(iris2)
colnames(iris2)
rownames(iris2)
dim(iris2)
nrow(iris2)
ncol(iris2)
# 查看前几行
head(iris2)
# 查看后几行
tail(iris2)
# 探索数据框结构
str(iris2)
summary(iris2)
# 求和、求平均
colMeans(iris2[,1:4])
colSums(iris2[,1:4])
# 转置
iris3 <- t(iris2)

缺失值

R中缺失值用符号NA(Not Available)表示,缺失值和空字符串的意义不同。

table(is.na(iris2))
# 缺失值
iris2[1,1] <- NA
# 空字符串
iris2[2,1] <- ""
# 移除所有含有缺失值的观测
iris2 <- na.omit(iris2)

数据框取子集

data(iris)
iris_sub1 <- iris[iris$Species=='setosa', c('Sepal.Length','Petal.Length')] 

# subset()函数
iris_sub2 <- subset(iris, iris$Species=='setosa',select = 1:3)
iris_sub2 <- subset(iris, iris$Species=='setosa',select = c(Sepal.Length,Petal.Length))

# 随机抽样
SampleRow <- sample(1:nrow(iris),size=5,replace=F)
iris[SampleRow,]

数据框合并

横向合并:列合并,确保两个数据框行的次序相同。

纵向合并:行合并,确保两个数据框具有相同的变量。

公共变量合并:可以是一个变量或者多个变量。

df <- data.frame(ID=1:150,
                 color=rep(c('red','green','blue'),times=50),
                 length=rep(c('high','middle','low'),times=50))

# 横向合并
newdf <- cbind(iris,df)

# 纵向合并
df2 <- data.frame(ID=151:180,
                  color=rep(c('red','green','blue'),times=10),
                  length=rep(c('high','middle','low'),times=10))
df3 <- rbind(df2,df[1:100,])

# 按照共有变量合并
iris$ID <- 150:1
df2 <- df[1:100,]

newdfI <- merge(iris,df3,by='ID') # 取相交
newdfL <- merge(iris,df3,by='ID',all.x=T) #左连接
newdfR <- merge(iris,df3,by='ID',all.y=T) #右连接

数据整合

数据整合:将多组观测替换为由这些观测计算出的描述性统计量。

#FUN参数除了常见的描述统计量之外之外,也可以自定义函数。
aggregate(newdf[,1:4],by=list(newdf$Species),FUN = mean)
aggregate(newdf[,1:4],by=list(newdf$Species,newdf$color),FUN = mean)

数据重构(长宽格式转换)

理论

数据重构:通过修改数据的行和列来改变数据的结构。

长格式:相对于宽格式而言,观测更多,变量更少(<=)。

宽格式:相对于长格式而言,观测更少,变量更多(>=)。

宽变长:减少分类变量个数,形成更多观测。

长变宽:增加分类变量个数,以减少观测个数。

数据准备
# reshap2包
install.packages('reshape2')
library(reshape2)

#构建数据框
Id <- as.character(c(1,1,2,2))
Grade<-as.character(c(1,2,1,2))
Math <- c(60,70,80,90)
History <- c(65,75,85,95)
data <- data.frame(Id,Grade,Math,History)
宽变长
# 宽变长
longdata <- melt(data,ID=c("Id","Grade"),variable.name = "Subject")
长变宽
# 长变宽
# 把Subject拆分形成新变量,新变量个数等于Subject独特值数
dcast(longdata,Id+Grade~Subject)
# 把Grade拆分形成新变量,新变量个数等于Grade独特值数
dcast(longdata,Id+Subject~Grade)
# 把Subject+Grade拆分形成新变量,新变量个数等于Subject+Grade独特值数
dcast(longdata,Id~Subject+Grade)

长格式和宽格式不是绝对的。

数据重构整合

数据重构并整合,类似于aggregate()函数的整合功能,但是更加灵活。

# 整合
# 某人某科目 不同学期成绩均值
dcast(longdata,Id~Subject,mean)
# 某学期某科目 不同学生成绩均值
dcast(longdata,Grade~Subject,mean)
# 某学生某学期 不同科目成绩均值
dcast(longdata,Id~Grade,mean)

 apply族函数

R语言中的apply族函数是重要的批量处理函数,其中常用的函数有apply、tapply、lapply、sapply、mapply。这些函数底层通过C实现,效率比手工遍历高效。apply族函数通过运算向量化(Vectorization)实现高效能运算,比起传统的for、while函数常常能获得更好的性能。

apply函数

apply : 对矩阵、数据框、数组(二维、多维)等矩阵型数据,按行或列应用函数FUN进行循环计算,并以返回计算结果。

apply(X, MARGIN, FUN, …)

  • X:数组、矩阵、数据框等矩阵型数据

  • MARGIN:按行计算或按列计算,1表示按行,2表示按列

  • FUN:自定义的调用函数,如mean/sum等(其结果与colMeans,colSums,rowMeans,rowSums是一样的)

> mat=matrix(c(1,2,3,4,5,6),2)
> mat
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> apply(mat,2,max)
[1] 2 4 6

tapply函数

tapply: 将数据按照不同方式分组,生成类似列联表形式的数据结果。

tapply(X, INDEX, FUN = NULL, …, default = NA, simplify = TRUE)

X:数组、矩阵、数据框等分割型数据向量

  • INDEX:一个或多个因子的列表(因子列表),每个因子的长度都与x相同

  • FUN: 自定义的调用函数

  • simplify指是否简化输出结果(类比sapply对于lapply的简化)

> manager <- c(1, 2, 3, 4, 5)
> country <- c("US", "US", "UK", "UK", "UK")
> gender <- c("M", "F", "F", "M", "F")
> age <- c(32, 45, 25, 39, 99)
> leadership <- data.frame(manager, country, gender, age)
> #求在不同country水平下的age的均值
> tapply(leadership$age, leadership$country, mean) 
      UK       US 
54.33333 38.50000 
> #求在不同country和gender交叉水平下的age的均值, 输出得到矩阵数据
> tapply(leadership$age, list(leadership$country, leadership$gender), mean)  
    F  M
UK 62 39
US 45 32

lapply函数

lapply : 对列表、数据框按列进行循环,输入必须为列表(list),返回值为列表(list)。

lapply(X, FUN, …)

  • X:列表、数据框

  • FUN:自定义的调用函数

> # 输入为列表
> data1<-list(x = 1:10, y = matrix(1:12, 3, 4))
> data1
$x
 [1]  1  2  3  4  5  6  7  8  9 10

$y
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

> lapply(data1, sum)
$x
[1] 55

$y
[1] 78

> # 输入为数据框
> data2=data.frame(matrix(1:12,c(3,4)))
> data2
  X1 X2 X3 X4
1  1  4  7 10
2  2  5  8 11
3  3  6  9 12
> lapply(data2, function(x) x+3)
$X1
[1] 4 5 6

$X2
[1] 7 8 9

$X3
[1] 10 11 12

$X4
[1] 13 14 15

sapply函数

sapply : 类似于lapply函数,但输入为列表(list),返回值为向量。sapply(X, FUN, …,simplify )

  • X:列表、矩阵、数据框

  • FUN:自定义的调用函数

  • simplify=F:返回值的类型是list,此时与lapply完全相同

  • simplify=T(默认值):返回值的类型由计算结果定,如果函数返回值长度为1,则sapply将list简化为vector;如果返回的列表中每个元素的长度都大于1且长度相同,那么sapply将其简化为一个矩阵;如果列表中的元素长度不相同时,仍以列表形式返回。

> # 输入为列表
> data1<-list(x = 1:10, y = matrix(1:12, 3, 4))
> data1
$x
 [1]  1  2  3  4  5  6  7  8  9 10

$y
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

> sapply(data1, sum)
 x  y 
55 78 
> sapply(data1, function(x) x+1)
$x
 [1]  2  3  4  5  6  7  8  9 10 11

$y
     [,1] [,2] [,3] [,4]
[1,]    2    5    8   11
[2,]    3    6    9   12
[3,]    4    7   10   13

> 
> # 输入为数据框
> data2=data.frame(matrix(1:12,c(3,4)))
> data2
  X1 X2 X3 X4
1  1  4  7 10
2  2  5  8 11
3  3  6  9 12
> sapply(data2, function(x) x+3)
     X1 X2 X3 X4
[1,]  4  7 10 13
[2,]  5  8 11 14
[3,]  6  9 12 15

mapply函数

mapply: 支持传入两个以上的列表,mapply是sapply的多变量版本(multivariate sapply)。

mapply(FUN, …, MoreArgs = NULL, SIMPLIFY = TRUE, USE.NAMES = TRUE)

  • FUN:要应用的函数

  • ...:要传递给FUN的参数列表。可以是多个参数,每个参数列表都是以逗号分隔的

  • SIMPLIFY:一个逻辑值,指定是否尝试简化结果

> a <- mapply(function(x,y) x^y, c(1:5), c(1:5))
> a
[1]    1    4   27  256 3125
> b <- matrix(1:12,c(3,4),dimnames=list(c("a","b","c"),c("A","B","C","D")))
> b
  A B C  D
a 1 4 7 10
b 2 5 8 11
c 3 6 9 12
> mapply(sum, b[,1],b[,3],b[,4])
 a  b  c 
18 21 24 
> mapply(sum,b[1,],b[2,],b[3,])
 A  B  C  D 
 6 15 24 33 
总结
  • apply对数据按行列操作

  • lapply、sapply对数据按列进行批量操作

  • tapply对数据按分组进行操作

  • mapply对多个输入数据,即多变量进行批量操作,是sapply的多变量版本

因子:函数factor()

  • 变量可归结为名义型、有序型(好,很好,非常好)或连续型变量

  • 类别(名义型)变量和有序类别(有序型)变量在R中称为因子(factor)

  • 要表示有序型变量,需要为函数factor()指定参数ordered=TRUE

  • 数值型变量可以用levels和labels参数来编码成因子

代码如下:

#因子的使用

A<- c(1, 2, 3, 4)

B <- c(25, 34, 28, 52)

C <- c("Type1", "Type2", "Type1", "Type1")

D <- c("Poor", "Improved", "Excellent", "Poor")

C<- factor(C)

D <- factor(D, order = TRUE)#表示有序型变量

mydata <- data.frame(A,B,C,D)#将其合并为数据框

str(mydata)#提供R中某个对象的信息

summary(mydata)#显示统计对象的统计概要

数组:可通过array()函数创建

代码如下:

#创建2*3*4三维数组

data1 <- c("A1", "A2")

data2 <- c("B1", "B2", "B3")

data3 <- c("C1", "C2", "C3", "C4")

z <- array(1:24, c(2, 3, 4), dimnames = list(data1, 

                                             data2, data3))

z

列表:使用函数list()创建

  • R的数据类型中最为复杂的一种

  • 某个列表中可能是若干向量、矩阵、数据框

  • 甚至其他列表的组合


代码如下:

#用levels和labels参数来编码成因子

sex<-c(1,2)

sex

sex<-factor(sex,levels = c(1,2),labels = c("male","female"))

sex

#创建列表 

g <- "My First List"

h <- c(25, 26, 18, 39)

j <- matrix(1:10, nrow = 5)

k <- c("one", "two", "three")

mylist <- list(title = g, ages = h, j, k)

mylist

描述性统计分析

summary()函数: summary(mydata)

  • 提供最小值、最大值、四分位数和数值型变量的均值

  • 因子向量和逻辑型向量的频数统计

apply()函数:apply(mydata,1,mean)

  • 1表示行,2表示列

  • 注:MARGIN1和2是必须要有的参数,没有就会报错

sapply(x, FUN, options)

  • FUN为一个任意的函数

  • 可以在这里插入的典型函数有mean()、sd()、var()、min()、max()、median()、length()、range()和quantile()

  • 需要用到function 函数

Hmisc包中的describe()函数

  • 变量和观测的数量、缺失值和唯一值的数目、平均值、分位数

  • 五个最大的值和五个最小的值

pastecs包中的stat.desc()函数

  • 格式为:stat.desc(x, basic=TRUE, desc=TRUE,norm=FALSE, p=0.95)

  • 若basic=TRUE(默认值),则计算其中所有值、空值、缺失值的数量,以及最小值、最大值、值域,还有总和

  • 若desc=TRUE(同样也是默认值),则计算中位数、平均数、平均数的标准误、平均数置信度为95%的置信区间、方差、标准差以及变异系数

  • 若norm=TRUE(不是默认的),则返回正态分布统计量,包括偏度和峰度(以及它们的统计显著程度)和Shapiro-Wilk正态检验结果

  • 这里使用了p值来计算平均数的置信区间(默认置信度为0.95)

psych包也拥有一个名为describe()的函数

  • 可以计算非缺失值的数量、平均数、标准差、中位数、截尾均值、绝对中位差、最小值、最大值、值域、偏度、峰度和平均值的标准误

使用aggregate()分组获取描述性统计量

  • 格式:aggregate(mydata,by=list(name1=mydata$A, mean)

  • 如果有多个分组变量,可以使用by=list(name1=groupvar1,name2=groupvar2, ... , nameN=groupvarN)这样的语句

  • 缺点:无法一次计算若干个统计量(mean,sd)

使用by()分组计算描述性统计量(同时计算多个统计量)

  • 注意:用到了function()函数

分组计算的扩展summaryBy()函数

  • doBy包中summaryBy()函数的使用格式为:

    summaryBy(formula, data=dataframe, FUN=function)

  • 注意:用到了function()函数


代码如下

#summary()函数

vars <- c("mpg", "hp", "wt")

head(mtcars[vars])

summary(mtcars[vars])

#apply()函数

apply(mtcars,1,mean)#1表示行,2表示列

#sapply()函数

mystats <- function(x, na.omit = FALSE) {

  if (na.omit) 

    x <- x[!is.na(x)]

  m <- mean(x)

  n <- length(x)

  s <- sd(x)

  skew <- sum((x - m)^3/s^3)/n

  kurt <- sum((x - m)^4/s^4)/n - 3

  return(c(n = n, mean = m, stdev = s, skew = skew, kurtosis = kurt))

}



sapply(mtcars[vars], mystats)

#Hmisc包中的describe()函数

library(Hmisc)

describe(mtcars[vars])

#pastecs包中的stat.desc()函数

library(pastecs)

stat.desc(mtcars[vars])

#psych包也拥有一个名为describe()的函数

library(psych)

describe(mtcars[vars])



#分组描述统计的方法

#使用aggregate()分组获取描述性统计量

aggregate(mtcars[vars], by = list(am = mtcars$am), mean)

aggregate(mtcars[vars], by = list(am = mtcars$am), sd)

#doBy包中summaryBy()函数

install.packages("doBy")

library(doBy)

mystats <- function(x, na.omit = FALSE) {

  if (na.omit) 

    x <- x[!is.na(x)]

  m <- mean(x)

  n <- length(x)

  s <- sd(x)

  skew <- sum((x - m)^3/s^3)/n

  kurt <- sum((x - m)^4/s^4)/n - 3

  return(c(n = n, mean = m, stdev = s, skew = skew, kurtosis = kurt))

}

summaryBy(mpg + hp + wt ~ am, data = mtcars, FUN = mystats)

19个全球气候数据图层+数据说明文件

链接:https://pan.baidu.com/s/1wZB9RqAvKMhs3t8OdeEkaA

提取码:1207

图绘制:中国数据+中国省界

链接:https://pan.baidu.com/s/1qtjYmm-XKiuKXviomp0KeQ

提取码:1207

地图绘制:云南边界+四川边界+贵州边界

链接:https://pan.baidu.com/s/1199tThT9QqsTMM-BrDdelg

提取码:1207

  • 26
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮肤小白生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值