许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  R语言入门教程:从零开始学R

R语言入门教程:从零开始学R

阅读数 7
点赞 0
article_banner

一、R基本

1.1 算术运算符


运算符描述
+加法
减法
*乘法
/除法
^或**求幂
%%求余
%/%整数除法

1.2 常用数学函数

  • abs(x)
  • sqrt(x)
  • sin(x)、cos(x)、tan(x)
  • asin(x)、acos(x)、atan(x)
  • exp(x)
  • log(x)、log2(x)、log10(x)
  • round(x)
  • ceiling(x)
  • floor(x)
  • trunc(x)

1.3 常用的统计函数


函数描述
length(x)求 x 中元素的个数
mean(x)求 x 的算术平均值
median(x)求 x 的中位数
var(x)求 x 的样本方差
sd(x)求 x 的样本标准差
range(x)求 x 的全距
min(x)求 x 的最小值
max(x)求 x 的最大值
quantile(x)求 x 的分位数
sum(x)求 x 中所有元素的和
scale(x)将 x 标准化

1.4 工作空间管理

工作空间(workspace)就是 R 的工作环境,所有创建的对象都被临时保存在工作空间(也可称为全局环境,.GlobalEnv)中。

  • ls( ) :列出当前工作空间中的所有对象
  • getwd( ) :查看当前的工作目录
  • setwd( ) :设定当前的工作目录

2. R 的数据结构

2.1 存储的数据结构

向量Vector:存储数值型、字符型、逻辑型数据的一维 数组  。标量可以看作是只含有一个元素的向量。函数 c( ) 可用来创建向量,每一个向量中的数据类型必须一致

因子factor:即分类变量,名义型变量是没有顺序关系的分类变量,有序型变量是有层级和顺序关系的分类变量

矩阵Matrix多维数组列表(允许不同类型数据混合), 数据框(dataframe)

'''向量赋值'''x1 <- c(2, 4, 1, -2, 5)x2 <- c("one", "two", "three")x3 <- c(TRUE, FALSE, TRUE, FALSE)x4 <- 1:5     # 等价于x4 <- c(1, 2, 3, 4, 5)x5 <- seq(from = 2, to = 10, by = 2)  # 等价于x5 <- c(2, 4, 6, 8, 10)x6 <- rep("a", times = 4)  # 等价于x6 <- c("a", "a", "a", "a") #下标取值x[5]    #从1开始计数x[c(4, 6, 7)]    #取第4,6,7x[-(1:4)]    #去掉前四个元素  '''因子赋值'''sex <- c(1, 2, 1, 1, 2, 1, 2)sex.f <- factor(sex,                levels = c(1, 2),     #levels 表示原变量的分类标签值                labels = c("Male", "Female"))    #labels 表示因子取值的标签 levels(sex.f)     #查看因子的属性sex.f1 <- relevel(sex.f, ref = "Female")     #改变因子水平的排序:改变参考组status.f <- factor(status,levels = c(1, 2, 3),labels = c("Poor", "Improved", "Excellent"),ordered = TRUE)    #有序因子 ordered=True  '''矩阵'''M <- matrix(1:6, nrow = 2, byrow=FALSE)     #byrow默认按列将数值进行排列dim(M)     #查看维度mat1 %*% mat2     #矩阵乘法t(mat1)     #转置det( )、solve( )      #行列式和逆矩阵rowSums、colSums、rowMeans、ColMeans      #按行、列求和或者求平均  '''数组:带标签的矩阵'''dim1 <- c("A1", "A2", "A3")dim2 <- c("B1", "B2", "B3", "B4")dim3 <- c("C1", "C2")print(array(1:24, dim = c(3, 4, 2), dimnames = list(dim1, dim2, dim3)))# --> , , C1   B1 B2 B3 B4A1  1  4  7 10A2  2  5  8 11A3  3  6  9 12 , , C2    B1 B2 B3 B4A1 13 16 19 22A2 14 17 20 23A3 15 18 21 24  '''列表: 很多函数返回值是列表'''list1 <- list(a = 1, b = 1:5, c = c("red", "blue", "green"))  '''数据框'''ID <- 1:5sex <- c("male", "female", "male", "female", "male")age <- c(25, 34, 38, 28, 52)pain <- c(1, 3, 2, 2, 3)      pain.f <- factor(pain, levels = 1:3, labels = c("mild", "medium", "severe"))   patients <- data.frame(ID, sex, age, pain.f) #引用某一个列:$patients$age  

2.2 数据类型的转换:is , as

数据类型的判断与 转换 函数


判断转换
is.numeric( )as.numeric( )
is.character( )as.character( )
is.logical( )as.logical( )
is.factor( )as.factor( )
is.vector( )as.vector( )
is.matrix( )as.matrix( )
is.array( )as.array( )
is.data.frame( )as.data.frame( )
is.list( )as.list( )
is.table( )as.table( )


3. R导入导出数据

3.1 内置数据集

#查看内置数据集data(package = "datasets")#调用iris数据data(iris)

3.2 创建数据

各种分布的数据:rnorm( )、runif( )、rbinom( )、 rpois( )

r1 <- rnorm(n = 100, mean = 0, sd = 1)r2 <- runif(n = 10000, min = 0, max = 100)r3 <- rbinom(n = 80, size = 100, prob = 0.1)r4 <- rpois(n = 50, lambda = 1) #查看hist(r1)head(r1)

3.3 导入数据

  • txt 格式:read.table( )
  • csv 格式:read.csv( )
  • xls 或 xlsx 格式:read.xlsx( )  需导入openxlsx包
  • R数据文件 rdata:load()
  • 其他格式:借助 library(foreign)

3.4 导出数据

txt或csv文件:write.table( ) 和 write.csv( )

R 数据文件:save()

save(patients, file = "patients.rdata")

3.5 rio包

rio 包以提供一个类似万能工具的包为目标,用统一的 import( ) 函数和 export( ) 函数简化了用户导入和导出数据的工作。此外,该包里的 convert( ) 函数可以实现不同 文件格式  之间的转换。rio 包支持多种文件格式,包括 SAS、SPSS、Stata、Excel、MATLAB、Minitab 等其他软件中使用的数据文件格式

library(rio)  #install_formats( )可以安装data("infert")str(infert)     #str常用于查看数据集的大小以及各个变量的类型 #导出export(infert, "infert.csv")#转换convert("infert.csv", "infert.sav")#导入infert.data <- import("infert.sav")


二. 数据集操作

View(iris)  #查看nrow(iris)ncol(iris)dim(iris)names(iris)  #列名str(iris)  #结构attributes(iris) #数据属性summary(iris)head(iris)tail(iris) colnames()  #重命名列

1. 统计分析数据

install.packages("Hmisc") library(Hmisc)describe(iris) #需要Hmisc包 mean(iris$Sepal.Length)median(iris$Sepal.Length)range(iris$Sepal.Length)  #数据范围区间quantile(iris$Sepal.Length, c(0.1,0.3,0.6))var(iris$Sepal.Length)cov(iris$Sepal.Length, iris$Petal.Length)  #covariancecor(iris$Sepal.Length, iris$Petal.Length)  #correlation table(iris, useNA='ifany')  #计数统计 colSums()  #按列求和rowSums()  #按行求和

2. 聚合

aggregate(iris$Sepal.Length ~ iris$Species, summary,data=iris) #向量化操作apply(x, MARGIN, FUN, ...)  #MARGIN是维度的下标,1表示行, 2表示列apply(mydata,1,mean) #求矩阵行均值apply(mydata,2,mean) #求矩阵列均值 lapply(X, FUN, ...)  #用于对列表对象执行操作

3. 可视化统计分析

#密度图plot(density(iris$Sepal.Length),main='Density of Sepal Length') #盒图boxplot(Sepal.Length ~ Species, data = iris)boxplot(Sepal.Length ~ Species, data = iris)$out  #查看异常值 #散点图 (x,y,color,marker)plot(iris$Sepal.Length, iris$Sepal.Width, col = iris$Species, pch = as.numeric(iris$Species)) #散点图矩阵(两两每列)pairs(iris) #柱状图barplot(iris$Sepal.Length, horiz=FALSE, las=2)

4. ggplot2包 作图

ggplot2的作图一般步骤为:

  • 准备数据,一般为数据框, 且一般为长表, 即每个观测时间占一行, 每个观测变量占一列。
  • 将数据输入到ggplot()函数中, 并指定参与作图的每个变量分别映射到哪些图形特性, 比如映射为x坐标、y坐标、颜色、形状等。 这些映射称为aesthetic mappings或aesthetics。
  • 选择一个合适的图形类型, 函数名以geom_开头, 如geom_point()表示散点图。 图形类型简称为geom。 将ggplot()部分与geom_xxx()部分用加号连接。 到此已经可以作图,下面的步骤是进一步的细化设定。
  • 设定适当的坐标系统, 如coord_cartesian(), scale_x_log10()等。 仍用加号连接。
  • 设定标题和图例位置等,如labs()。 仍用加号连接。

5. 字符串操作

#分割字符串strsplit(x,'[$]')


三、数据预处理

1. 缺失值

#查看缺失值NAis.na(iris)which(is.na(iris))  #返回缺失值位置 #填充缺失值NAx[is.na(x)] <- mean(x, na.rm=TRUE) #筛除缺失值NAcomplete.cases(df)  #返回各行布尔值, df[complete.cases(), ]na.omit(df)  #返回不含缺失值的各行 #查看空值(没有赋值), 空格字符串不是空值!is.null()  #除去字符型数据前后的空格library(raster)trim(iris)

2. 异常值

Methods:

  • Use Interquartile range:Outliers = Observations > Q3 + 1.5*IQR or < Q1 – 1.5*IQR
  • Use z-score:Outliers = Observations with z-score > 3 or < -3
# IQRboxplot(iris$Sepal.Width)$out  #输出异常值boxplot(iris$Sepal.Width, outline=False)  #忽略异常 # z-scorescale(iris$Sepal.Width)  #(样本-样本均值)/样本标准差

3. 重复值

#查看是否重复值duplicated(df,by=c("id","value")) #重复值索引which(duplicated(df)) #除去重复值, 两种方法df[!duplicated(df,by=c("id","value")),]unique(df)

4. 标准化\归一化

#极大极小缩放min_max_norm <- function(x){    (x-min(x))/(max(x)-min(x))}lapply(iris,min_max_norm) #标准化scale()

5. 类别编码

#Ordinal Encoding factor_Breakfast <- factor(Breakfast,order = TRUE,levels=c('Never','Rarely','Most days','Every day'))encode_Breakfast <- as.numeric(factor_Breakfast)encode_Breakfast #One-Hot Encoding 法1model.matrix(~iris$Species-1,iris)) #返回独热编码#法2library(mltools)library(data.table)one_hot(as.data.table(as.factor(iris$Species))) #返回独热编码  

6. 特征选择


四、数据挖掘算法

1. 划分数据集

set.seed(1234) idx <- sample(c(TRUE, FALSE), nrow(iris), replace=TRUE, prob=c(0.7,0.3))train <- iris[idx, ]test <- iris[!idx, ]

2. 算法

#KNNlibrary(class)knn_output <- knn(train[,1:4],test[,1:4],train[,5],k=3) #决策树library(rpart)model1 <- rpart(Species~., data = train, method = 'class')dt_output <- predict(model1, test[,1:4],type = 'class') #随机森林library(randomForest)model2 <- randomForest(Species ~ ., data = train, ntree=200, importance = TRUE)rf_output <- predict(model2, test[,1:4]) #线性回归model1 <- lm(Balance~.,data=train)lm_output <- predict(model1,test) 

3. 结果评估

3.1 分类算法

#混淆矩阵table(knn_output,test$Species) #具体统计分析和混淆矩阵library(caret)confusionMatrix(knn_output, test$Species, mode='everything')



     confusionMatrix
    

3.2 回归算法

#线性回归library(performance)check_model(fit)  library(caret)RMSE()MAE()


统计回归分析:

#遍历赋值x <- c(1,2,3,4,5)y <- c(6,7,8,9,10) #一元回归模型fit = lm(y~x) #置信区间confint(fit)#统计总结summary(fit) #逻辑回归模型model = glm(cbind(y,1-y) ~x1+x2, family=binomial, data=df )


更多

R语言数据挖掘分析常用函数和包有哪些? - 知乎

https://zhuanlan.zhihu.com/p/40522720

R 语言必学的 10 大包是什么? - 知乎

https://www.zhihu.com/question/24136262
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删




相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空