【R语言学习系列1】- 基础篇

一.安装

按照自己的电脑的版本进行下载即可。

  1. R语言安装包
  2. R语言IDE:Rstudio

二. 小试牛刀

我用的mac,打开命令终端,输入R即可进入到对应的R语言终端进行编码。下面重点说一下基本的R语言的命令

2.1 数学运算和向量

  1. 命令提示:两个问号+关键词
??plotting

上面这条命令就查看了关于画图的所有的命令

  1. 命令查看:问号+双引号(引号中间是要查询的命令)
?"mean"

上面这条命令就查看了mean这个函数的作用
用q退出查看情况

  1. 查看范例:example(命令)q
example(plot)

4.下面是一些科学计算的命令,统一介绍

+ - * /  #最简单的加减乘除

通过冒号运算符创建一个从某个数值开始到另一个数值结束的序列
通过c函数可以将产生的序列链接到一起

1:5
c(1:5)
1:5+1:5

注意尽量使用向量化参数,尽量少使用for函数

sum(1:5) 计算加和
median(1:5) 计算中位数

需要注意一个事情,在很多情况下,要处理的参数是统一作为向量进行处理的,所以如下两个命令结果是不一样的

median(1,2,3)
median(c(1,2,3))

前者结果是1,后者结果是2,原因在于median的参数的具体定义是

median(x,na.rm=False,...)

如果是第一种,那么我们的数据x仅仅是1,2对应na.rm,3对应后面的可变变量。
如果是第二种,那么123对应于我们要处理的X
所以一定要注意,我们函数的接收对象是向量,而不是单纯的单值

c(1,2,3,4)-2 #向量的每个元素都会减去2
-2:2*-2:2    # 对应位置会相乘
-2:2*-2:7   # 长的对象长度要是短的对象长度的整数倍
(1:3)^2 # 乘方
1:10 / 3 # 除法
1:10 %% 3 # 取余数
sin(pi/4) 
sin(c(pi/4,pi/2))  #sin cos tan asin acos atan log exp 等

比较符号

== > < >= <= !=

比较符号也可以向量化

c(1,2,3) == 2
exp(1:5) <=100

但是由于计算机内部存储数据的问题

sqrt(2)^2 == 2 # 结果是false

所以R语言专门提供了一个all.equal函数,它提供了一个容忍度,当小于那个容忍度的时候误差将会被忽略

all.equal(sqrt(2)^2,2)

2.2 变量赋值

# 下面两种赋值方式都可以,书上推荐第一种,但是我比较喜欢第二种
x <- 1:5
y = 1:5
c <<- 3 #设置全局变量

2.3 特殊数字

  1. Inf:正无穷
  2. -Inf:负无穷
  3. NaN:不是一个数字(not a number),意味着我们的计算没有意义或者无法正确执行
  4. NA:不可用(not available)并代表缺失值
Inf+1
Inf-1
Inf-Inf
1/Inf
Inf/1
Inf/Inf
log(inf)
NA+1
NA+Inf
NA*5

可以通过函数来进行判断,NaN和NA既不是有限值也不是无限值,NaN代表缺失值

x <- c(0,Inf,-Inf,NaN,NA)
is.nan(x)
is
.na(x)
is.infinite(x)
is.finite(x)

2.4 逻辑向量

! 非
& 与
| 或

三. 初窥门径

3.1 查看判断数据类型

# 数字类型就以下三类
class(1:3) # integer 整型
class(6)  # numeric  浮点型
class(2.3)  # numberic
class(3+1i)  # complex 复数
# 字符型
class("hello") # character
# 布尔型
class(FALSE)  TRUE # logical

查看系统中对于类型的判断

ls(pattern = "^is",baseenv())
is.numeric(1) # 判断1是不是浮点型
is.logical(FALSE)
is.integer(1:3)

打印出数据方便检查变量,尤其是通过终端进行代码编写的时候

x <- 1:3
print(x)

数据的检视

num <- runif(30) #加载数据或者产生数据:产生30个0到1之间均匀分布的随机数
summary(num) # 数据总体情况
head(num)   # 前几行数据
str(num)    # 显示对象结构

3.2 向量

vector 函数可以创建一个指定类型和长度的矢量,其中的值可以是0,FALSE,空字符串,或者nothing

vector("numeric",5)
vector("complex",2)
vector("logical",3)
vector("character",5)

seq.int可以创建一个序列,序列的范围可以由两个数字指定

seq.int(1,3) #等价于1:3
seq.int(1,10,3) # 1,4,7,10 最后一个是步长
seq_len(3) #1,2,3
seq_len(0) # integer(0)

获得序列长度

length(1:5)
x<-1:6
length(x)

可以给R向量的每一个元素命名

# 可以在初始化的时候进行命名
x <- c(apple=1,banana=2,3)
x
x[1]
class(x) # numeric
# 也可以在向量创建之后用names函数为元素添加名字
x <- 1:3
names(x)<-("a","b","")
snames(x)
x

部分元素获取:切片slice

x<-1:5
x[c(1,3,5)] #正数序列:得到对应位置元素
x[c(-2,-4)] #负数,要去掉当前位置的元素
x[c(TRUE,FALSE,TRUE,FALSE,TRUE)] # 对应True得到,反之去掉。
x[seq.int(2,4)]
x[seq.int(4,2)]
x[seq.int(1,5,2)]

当不同长度的向量配合运算的时候,短的向量会配合长的向量。

1:5+1
1:3+1:6 # 2,4,6,5,7,9 实际上1:3重复了两次

但是这种情况不利于代码的阅读

rep(1:3,2) # 1:3 重复两次
rep(1:3,each =2) # 每个元素重复两次
rep(1:3,times=1:3) # 对应位置元素重复time次
rep(1:3,length.out = 5) # 重复直到达到对应的长度

3.3 矩阵 数组

# 数组
x <- array(1:12,c(3,4))
x[1,] # 查看第一行
x[,1]  # 查看第一列
dim(x) #查看维度

#矩阵
y <- matrix(1:12,nrow = 4)
y
y[1,]
y[,1]
dim(y)
nrow(y)
ncol(y)

3.4 控制流

# if语句
if(TRUE) print("yes")
# if esle
x<-7
if(x>10){
    print("x>10")
}else{
    print("x<=10")
}
# if-else if-else
x<-7
if(x>10){
    print("x>10")
}else if(x>5){
    print("x>5")
}else{
    print("x<=5")
}
# for循环
for(i in 1:10)
    print(i)
# while 循环
i<-0
while(i<10){
    print(i)
    i=i+1
 }

四. 登堂入室

4.1 读取数据

  1. 读取R语言内置的数据
data() #查看所有的数据文件,
# 直接使用名字即可加载,这里以BOD为例进行讲解
BOD #全部展示数据
head(BOD)   #前几条数据
summary(BOD)    #简单的数据分析
  1. 读取CSV文件
x <- read.csv(file="/Users/liqingwen/workplace/Rspace/mdata/test.csv",header=TRUE)
x
head(x)
summary(x)
dim(x)
rownames(x)
colnames(x)
x[1:3,] #前三行
x[,2] # 第2列
# 写数据到csv文件中,
write.csv(x=mdata, file="stu_bak.csv", row.names=F, quote=F)
  1. 读取excel文件
另存为csv文件,然后用第一种方式来处理。

4.2 处理数据

  1. 添加新列
# 添加新的一列,数据为91:95
x$grades <- 91:95
# 添加新的一列,
x$grade1<-x$grade+1
  1. 删除新列
# 不显示第二列
x[,-2]
# 去掉第一行
x[-1,]

之后用到其他地方的话,继续更新。

你可能感兴趣的:(【R语言学习系列1】- 基础篇)