R语言基础入门 安装 环境搭建 装包 作图 基本操作

R优势

缺点

开源、免费

维护凭自觉

跨平台

运算速度慢

支持脚本和批处理

for循环非常慢

统计问题支持良好

内存消耗大

画图方便

非命令行只支持单核计算

拓展方便 R包

R说明文档格式混乱

R安装、环境搭建

如何下载R语言和RStudio软件(分步详解) - 知乎

R与RStudio最简单安装指南 - 知乎

RStudio免费的IDE 用迅雷或IDM下载 速度快

R包镜像设置

R包--完成特定分析功能 用相应的 R程序包 实现

R界大佬

Hadley Wickham

使用前环境environment清空

rm(list=ls())

基本操作

getwd() ##获取当前R工作目录
setwd(dir = "D:/Program Files/R") ##自定义R工作目录
list.files() ##查看R工作目录下的所有文件和文件夹(不能查看嵌套文件夹里的文件)
dir() ##同上

x <- 1 ##赋值,局部变量
y = 1 ##同上,R中不推荐
z <<- 1 ##赋值,全局变量
m <- max(5,6,7) #取最大值
n = mean(c(8,9,10)) #取平均值
v = sum(3,4,5) #取和

ls() #查看所有变量
ls.str() #查看所有变量 类型 值
str(m) #查看该变量的类型 值
rm(x) #删除该变量
rm(y,z) #删除多个变量
rm(list = ls()) #删除所有变量

history() #查看所有历史命令
history(10) #查看最近10条历史命令
save.image() #保存当前工作空间(会在之前设置的R工作目录中生成一个".RData"文件)
q() #退出软件

R包操作

install.packsges("vcd") #安装 vcd包
install.packages(c("AER","ca")) #安装多个包
update.packages() #更新所有包

detach("package:包名") #移除内存加载的包
remove.packages("包名") #删除已安装包

library(包名) #载入包
require(包名) #同上

help(package="包名") #包的帮助文档
library(help="包名") #包的基础信息(说明书)
ls("package:包名") #包中包含的函数
data(package="包名") #包中的数据集


.libPaths() #显示R默认安装包的位置
library() #显示当前R环境中所有包

Push、Clone项目 包的处理

Push处理
installed.packages() #显示已安装包
installed.packages()[,1] #显示包的第一列 即 已安装包的名字
Rpack <- installed.packages()[,1] 
save(Rpack,file="Rpack.Rdata") #包名保存到 Rpack.Rdata 文件中

Clone处理
for(i in Rpack) install.packages(i) #一次安装所有缺少的包

使用

R自带基础包

base

utils

graphics

methods

stats4

datasets

grDevices

stats

splines

tcltk

获取帮助

help.start() #显示帮助文档

help(sum) #打开sum函数帮助文档
args(sum) #显示sum函数需要的参数
example(sum) #显示sum函数的示例

内置数据集

help(packages = "datasets") #打开R中数据集的帮助文档
data() #显示所有数据集
rivers #河流长度数据集

变量命名,尽量避开数据集名

如被覆盖

data("rivers")

数据结构

数据类型

数值型

直接运算

字符串型

连接,提取,转换

逻辑型

真,假

日期型

数据结构:向量、标量、列表、数组、多维数组

一维向量(默认列向量,行向量需转置)

x <- c(1,2,3) #函数c创建,默认列向量 数值型 numeric
y <- c(4,5,6,"rrt") #含有字符,所有元素强制转为字符型 "4""5""6""rrt"
z <- c("one","two","three") #字符串型 character
m <- c(TRUE,T,F) #逻辑型 logical

长度、类型

length(x) #求向量的长度
mode(m) #求向量的类型

向量索引

正(负)数索引

逻辑索引

名称索引

x[1] #输出x向量 第1个元素
x[c(4,6)] #输出第4,6个元素
x[-1] #输出除了第1个元素外的所有元素
x[c(-4,-6)] #输出除了第4,6个元素外的所有元素

x[x>0] #输出正数
x[x <= -2 | x > 5] #输出小于等于2 或者 大于5 的数

x[c(F,T)] #输出第2n个元素
x[c(T,F)] #输出第2n-1个元素
x[c(F,F,T)] #输出第3n个元素

x > 0 #输出 TRUE FALSE 每项元素判断后布尔值

pH <- c(area1=4.5, area2=7, mud=7.3, dam=8.2, middle=6.3)
#此时索引可以用名字来索引内容,如pH['mud']等,类似于python语言中的Dict(字典)

%in%在字符串向量中的使用

x <- c("one","two","three","four","five")
"one" %in% x #TRUE 判断字符串"one"是否在向量中

y <- c("one","two","three")
y %in% x #TRUE TRUE TRUE 判断y每个元素是否在x向量中
x %in% y #TRUE TRUE TRUE FALSE FALSE FALSE 判断x每个元素是否在y向量中

向量的增删

x <- c(1:5) #创建向量 1,2,3,4,5
x[10] <- 10 #第10个元素赋值为10
x #1 2 3 4 5 NA NA NA NA 10
append(x,66,after = 3) #向量x的第3个元素后赋值66 1 2 3 66 5 NA NA NA NA 10

x <- x[-c(1:3)] #删除向量第1-3个元素
rm(x) #删除向量x

向量与向量的运算

长度一致,对应位置 加减乘除

v1 <- c(4,6,87)
v2 <- c(34,32.5,12)
v1+v2 #结果 38.0 38.5 99.0

v2 / v1 #除
v2 %/% v1 #整除
v2 %% v1 #取余

长度不一致,(要求成倍数),循环n次

v1 <- c(1:4)
v2 <- c(1,2)
v1+v2 #结果 2,4,4,6

常用的运算函数

abs(x) #绝对值
sqrt(x) #开平方

sqrt(x[c(3:4)]) #第3,4个元素开平方
log(x[c(3:4)) #求对数 10为底
log(16, base = 2) #2为底

ceiling(x) #向上取整
floor(x) #向下取整
trunc(x) #保留整数部分 与上面的区别 同时出现正负数时,结果不同
round(x, digits = 2) #保留2 位小数

sin(x) #三角函数
cos(x)

max(x) 
min(x)
range(x) #求范围(即最大值和最小值)
var(x) #方差
sd(x) #标准差
median(x) #中位数
quantile(x) #四分位数
quantile(x,c(0.2, 0.5, 0.8)) #自定义分割

由值求索引

which.max(x) #最大值的索引
which.min(x) #最小值的索引
which(x == 5) #等于5的元素的索引
which(x > 5) #大于5的元素的索引

向量的名字

> x <- c(1:5)
> y <- c("one","two","three","four","five")
> names(x) <- y
> x
  one   two three  four  five 
    1     2     3     4     5 
> x["one"] #由表头访问
one 
  1 
> x[1] #由值访问
one 

矩阵

矩阵(Matrix)是按照长方形阵列排列的数的集合。向量是一维的,矩阵是二维的

矩阵创建

m <- matrix(1:20,4,5) #4行5列,默认从列开始排
n <- matrix(1:20,4,5,byrow = T) #从行开始排

矩阵每一维添加名字

rnames <- c("R1","R2","R3","R4")
cnames <- c("C1","C2","C3","C4","C5")
dimnames(m) <- list(rnames,cnames)
m

矩阵的维数

 x <- c(1:20)
dim(x) #向量的维数是0
dim(x) <- c(4,5) #向量x改为4行5列
dim(x) <- c(2,2,5) # 改为2行2列 高度为5
x
, , 1

     [,1] [,2]
[1,]    1    3
[2,]    2    4

, , 2

     [,1] [,2]
[1,]    5    7
[2,]    6    8

, , 3

     [,1] [,2]
[1,]    9   11
[2,]   10   12

, , 4

     [,1] [,2]
[1,]   13   15
[2,]   14   16

, , 5

     [,1] [,2]
[1,]   17   19
[2,]   18   20

array函数

?array #打开array函数的用法

arr_name_1 <- c("A1","A2")
arr_name_2 <- c("B1","B2","B3")
arr_name_3 <- c("C1","C2","C3","C4")
array(1:24,c(2,3,4),dimnames = list(arr_name_1, arr_name_2, arr_name_3))#创建一个矩阵 2行3列4高 行名 列名 高名

访问矩阵中的元素

单个元素访问

x <- matrix(1:20, 4, 5)
x[1,2] #访问第1行 第2列 的元素
x[4] #访问 第一列开始数第4个元素

多个元素访问

x <- matrix(1:20, 4, 5)
x[2,c(2,4)] #访问第 2 行 第2,4列 的元素
x[c(3:4),c(2:4)] #访问第 3,4 行 第 2,3,4 列 的元素
x[2,] #访问第 2 行元素
x[ ,3] #访问第 3 列元素
x[-1,3] #访问第 3 列元素,除第一个外

维名访问

x <- matrix(1:20, 4, 5)
dimnames(x) <- list(c("B1","B2","B3","B4"),c("A1","A2","A3","A4","A5"))
x["B1",c(2:5)] #B1行 第2,3,4,5列元素
x["B1","A4"] #访问B1行 A4列元素
x["B1",]
x[,"A3"]

矩阵运算

对应元素加减乘

x <- matrix(1:20, 4, 5)
x+1 #所有元素加1
x+x #对应元素相加
x*x #对应元素相乘 即 矩阵的外积 ;最后一个元素 20*20

常用的内置函数

x <- matrix(1:20, 4, 5)
sum(x) #矩阵所有元素相加
max(x) #矩阵最大值
colSums(x) #矩阵每一列和
rowSums(x) #矩阵每一行和
colMeans(x) #每一列平均值

y <- matrix(1:4, 2, 2)
z <- matrix(2:5, 2, 2)
y %*% z #矩阵乘法 即 矩阵的内积

diag(x) #矩阵对角线元素
t(x) #矩阵转置

修改/增添 数据

x <- matrix(1:20, 4, 5)
dimnames(x) <- list(c("B1","B2","B3","B4"),c("A1","A2","A3","A4","A5"))
transform(x,A1=A1*5) #行列数据修改 原矩阵没被修改

transform(x,A6 = rowSums(x)) #增添 1 列数据
cbind(x,sum = rowSums(x)) #增添数据 cbind函数 矩阵+数组的合并 增添列
rbind(x,sum = colSums(x)) #增添数据 rbind函数 矩阵+数组的合并 增添行

x["B1","A2"] <- 3 #单个数据修改 原矩阵被修改了

apply() 自定义操作函数(矩阵&数据集)

> ?apply(array, margin, ...)  # 可以进行自定义function
> apply(WorldPhones, MARGIN = 1, FUN = sum) # MARGIN = 1 即行名操作
  1951   1956   1957   1958   1959   1960   1961
 74494 102199 110001 118399 124801 133709 141700
> apply(WorldPhones, MARGIN = 2, FUN = sum) # MARGIN = 2 即列名操作
  N.Amer   Europe     Asia   S.Amer  Oceania   Africa Mid.Amer
  467233   240404    43605    19406    18375    10388     5892
> apply(WorldPhones, MARGIN = 1, FUN = mean)
    1951     1956     1957     1958     1959     1960     1961
10642.00 14599.86 15714.43 16914.14 17828.71 19101.29 20242.86
> apply(WorldPhones, MARGIN = 1, FUN = max)
 1951  1956  1957  1958  1959  1960  1961
45939 60423 64721 68484 71799 76036 79831

rev() 向量、矩阵倒序

> letters
 [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w"
[24] "x" "y" "z"
> rev(letters)
 [1] "z" "y" "x" "w" "v" "u" "t" "s" "r" "q" "p" "o" "n" "m" "l" "k" "j" "i" "h" "g" "f" "e" "d"
[24] "c" "b" "a"

> women
   height weight
1      58    115
2      59    117
3      60    120
......
> women[rev(row.names(women)),]
   height weight
15     72    164
14     71    159
13     70    154
......

注意:rev()倒序矩阵 参数只能是矩阵的行名

sort 向量、矩阵的排序

rivers
sort(rivers) #正序,升序
sort(rivers, decreasing = T) #倒序

sort(women$height)
sort(women$height, decreasing = T)

注意:sort()倒序矩阵 参数是列名 输出的是列的数据,是向量 失去了与矩阵的关联性

mtcars[rev(row.names(mtcars)),] #原数据 倒序
mtcars[sort(row.names(mtcars)),] #按行名排序 升序
mtcars[rev(sort(row.names(mtcars))),] #按行名倒序

order 矩阵自定义排序

sort(rivers) #升序
order(rivers) #升序 返回的是 位置(下标)

mtcars
order(-mtcars$mpg) #mpg行,倒序 返回的是位置(下标)
mtcars[order(mtcars$mpg),] #mpg行,升序
mtcars[order(mtcars$mpg, decreasing = T),] #mpg行,倒序
mtcars[order(-mtcars$mpg),] #同上
mtcars[rev(order(mtcars$mpg)),] #同上

mtcars[order(mtcars$mpg, mtcars$cyl),] # 当两行的mpg数据一样时,再根据cyl数据来排序

列表

其他编程语言中 列表与数组 差不多

R中 列表是最复杂的数据结构

列表是一些对象的有序集合。可以存储向量、矩阵、数据框,甚至其他列表的组合

列表的特点

  1. 模式上和向量类似,一维数据集合
  2. 列表可以存储R中任何数据结构,甚至列表本身

创建列表

a <- (1:5)
b <- matrix(1:20, 4, 5)
c <- 5
d <- "This is a string."
mlist <- list(a, b, c, d) #组建列表
mlist #输出

访问列表

mlist[1] #访问列表的第一个成分,返回结果仍是 列表
mlist[c(2,3)] #访问列表的第2,3成分,返回结果是 列表
mlist[[1]] #访问列表的第一个成分所有元素,返回结果是 元素本身的格式
mlist[[1]][1] #访问列表第一个成分的第一个元素

列表成分命名

mlist <-list(first=a, second=b, third=c, forth=d) 

通过列表成分名访问

mlist$forth #访问forth成分 本来的形式
mlist[4] #同上 列表形式呈现

> class(mlist$forth) 
[1] "character"
> class(mlist[4])
[1] "list"

mlist$second[1] #访问second成分即矩阵,的第1个元素

删除列表中的元素

mlist[c(-1,-2)] #返回除 1,2 成分外的所有成分;原列表 没被修改
mlist[4] <- NULL #删除第4成分
mlist$third <- NULL #删除第3成分

lapply()与sapply()

apply(WorldPhones,MARGIN = 1, FUN = sum) #apply()函数职能应用于矩阵和数据集

lapply(state.center, F
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值