R基础1——数学运算、数据结构

R基础1

博文介绍了R的入门常用知识,包括R软件的下载、安装;宏包的安装于调用;帮助文档的使用;基本的查询;常见的数学运算;常用的五种数据结构: Vectors(向量) 、Matrices(矩阵) 、 Arrays (数组)、 Lists (列表)、 Dataframes()数据框,它们对应的产生方式、应用方法以及各自常用函数的总结。

官网: http://www.r-project.org/
安装宏包: install.packages(“包名”)
调用宏包:library(gplots) / require(??)
帮助: ?function name / help(function name)
模糊搜索:??“key words” / help.search(“key words”)
R面向对象,严格区分大小写
工作路径:

> getwd()  #查看当前工作路径
[1] "E:/workspace/self_shlay/190725"
> setwd("E://workspace/")  #设置工作路径
> getwd() #再次查看设置后的工作路径
[1] "E:/workspace"

清除变量:

rm(list="a") #清楚变量a
rm(list=ls()) #清除所有变量

选项设置:

> defaults <- options()
> getOption("digits")
[1] 7
> pi
[1] 3.141593
> options(digits=15)
> pi
[1] 3.14159265358979
> options(defaults)
> getOption("digits")
[1] 7

1.数学运算

运算类型
二元运算符+-*/^(幂运算)%%(求余数)
数学函数abs(绝对值)sqrt(平方根)log(对数)exp(指数)log10(以10为底取对数)factorial(阶乘)
三角函数sincostanarcsinarccosarctan
取整round(四舍五入)ceiling(向上取整)floor(向下取整)trunc(只取整数部分)signif(保留给定位数)zapsmall(小数点后指定位数开始四舍五入)
三角函数Inf(正无穷)-Inf(负无穷)NAN(空值)pi(圆周率)exp(1)(e=2.7182)1i(复数,数字1,字母i)
#一些例子:
x=124%%10 #求余数
x
[1] 4
> a=factorial(4) #求阶乘
> a
[1] 24

##取整
> b=c(-1.58881,-2.31234,-3.96654,2.10023,5.76543)
> round(b)
[1] -2 -2 -4  2  6
> ceiling(b)
[1] -1 -2 -3  3  6
> floor(b)
[1] -2 -3 -4  2  5
> trunc(b)
[1] -1 -2 -3  2  5
> signif(b,digits = 3)
[1] -1.59 -2.31 -3.97  2.10  5.77
> zapsmall(b,digits = 2)
[1] -1.6 -2.3 -4.0  2.1  5.8
> zapsmall(b,digits = 4)
[1] -1.589 -2.312 -3.967  2.100  5.765
##
> 0/0
[1] NaN
> 1/Inf
[1] 0

2. 数据结构

展示常用的五种数据结构: Vectors ; Matrices ; Arrays ; Lists ; Dataframes

2.1 Vectors(向量)

向量生成:
常用产生向量的四种形式:c() ; :(冒号) ; seq() ; rep()
示例如下:

> v1 <- c(1,2.5,3.6,4,5)
> v1
[1] 1.0 2.5 3.6 4.0 5.0
> v2 <- -3:3
> v2
[1] -3 -2 -1  0  1  2  3
> v3 = seq(1,3,by=0.5)
> v3
[1] 1.0 1.5 2.0 2.5 3.0
> seq(0, 2, len=5)
[1] 0.0 0.5 1.0 1.5 2.0
> rep(1:3, each=2)
[1] 1 1 2 2 3 3
> rep(1:3, times=2)
[1] 1 2 3 1 2 3
> rep(1:3, times=c(2,3,4))
[1] 1 1 2 2 2 3 3 3 3

获取向量元素
常见三种方法:[ ] ; which() ; match()
示例如下:

#[]
> v1 <- c(1,2.5,3.6,4,5)
> v1[3] #R语言下标从1开始
[1] 3.6
> v1[1:3] #R语言1:3表示1,2,3 . 左右两端的数字均包括
[1] 1.0 2.5 3.6
> v1[c(1,3,4)] #以向量的形式展示将要取出的元素下标
[1] 1.0 3.6 4.0
> v1[-2] #表示返回删掉第二个元素后的向量,实际v1并未改变
[1] 1.0 3.6 4.0 5.0
> v1[-c(2,3)] #表示返回删掉第二、三个元素后的向量
[1] 1 4 5
> v1[v1>3] #表示提取v1中大于3的元素
[1] 3.6 4.0 5.0
> v1[3]<- 999 #将v1的第三个元素重新赋值为999
> v1
[1]   1.0   2.5 999.0   4.0   5.0

### which()
> v1>=4 #判断v1的每个元素是否大于等于4
[1] FALSE FALSE  TRUE  TRUE  TRUE
> which(v1>=4) #返回v1中大于等于4的元素所在的位置下标
[1] 3 4 5
> which.max(v1) #返回v1中最大值所在的位置下标
[1] 3
> which.min(v1) #返回v1中最小值所在的位置下标
[1] 1
> v1[which.max(v1)] #根据v1中最大值所在的位置下标结合[ ]返回v1中最大元素值
[1] 999
> max(v1) #获取向量最大元素值的简易方法
[1] 999

### match()
v5 <- rep(1:5, times=5:1)
> v5
 [1] 1 1 1 1 1 2 2 2 2 3 3 3 4 4 5
> match(1:5,v5) #返回元素1,2,3,4,5首次出现的位置下标
[1]  1  6 10 13 15
> unique(v5) #获取向量v5中元素取值种类
[1] 1 2 3 4 5
> match(unique(v5),v5) #获取向量v5中元素各取值首次出现的位置
[1]  1  6 10 13 15

向量常用函数
向量相关的有用函数

2.2 Matrixs(矩阵)

(1)创建矩阵:

#语法
matrix(data=NA, nrow=1, ncol=1, byrow = FALSE, dimnames = NULL)
#例子
m <- matrix(c(5,0,6,1,3,5,9,5,7,1,5,3), nrow=3, ncol=4, byrow=TRUE, dimnames=list(rows=c("r.1", "r.2", "r.3"), cols=c("c.1", "c.2", "c.3", "c.4")))
> m
        cols
rows    c.1  c.2  c.3  c.4
 r.1     5    0    6    1
 r.2     3    5    9    5
 r.3     7    1    5    3

注意
1)填充矩阵的数据个数不够时将循环使用向量中的数据进行填充
2) nrow, ncol分别定义矩阵的行数和列数;
3)默认的是byrow = FALSE,即按列填充数据;
4)dimnames 默认为 NULL,也可为长度为2的列表分别定义矩阵各行各列的名称。

(2)矩阵元素提取
[ ] 与向量的提取方式一样,只不过矩阵是二维数据的形式

#1.通过[ ]提取元素
x <- matrix(c(5,0,6,1,3,5,9,5,7,1,5,3), nrow=3, ncol=4, byrow=TRUE)
> x
    [,1] [,2] [,3] [,4]
[1,]  5    0    6    1
[2,]  3    5    9    5
[3,]  7    1    5    3
> x[2,3] # Row 2, Column 3
[1] 9
> x[1,] # Row 1
[1] 5 0 6 1
> x[,2] # Column 2
[1] 0 5 1
> x[c(1,3),] # Rows 1 and 3, all Columns
    [,1] [,2] [,3] [,4]
[1,]  5    0    6    1
[2,]  7    1    5    3
#2.通过设置行名、列名提取元素
> colnames(x) <- c("c.1", "c.2", "c.3","c.4")
> x
    [,c.1] [,c.2] [,c.3] [,c.4]
[1,]  5    0    6    1
[2,]  3    5    9    5
[3,]  7    1    5    3
> x[,"c.2"] # Column named "c.2"
[1] 0 5 1
> colnames(x)
[1] "c.1" "c.2" "c.3" "c.4"
> N <- matrix(c(1,2,3,4,5,6,7), nrow=3, ncol=4)
> N
      [,1] [,2] [,3] [,4]
[1,]    1    4    7    3
[2,]    2    5    1    4
[3,]    3    6    2    5
>  colnames(N) <- c("c.1", "c.2", "c.3","c.4")
>  N
      [,c.1] [,c.2] [,c.3] [,c.4]
[1,]     1      4      7      3
[2,]     2      5      1      4
[3,]     3      6      2      5
#矩阵按行或者按列合并
 > M <- diag(3)
 > M
      [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    1    0
[3,]    0    0    1
> (MN <- cbind(M, N)) 
                    [,c.1] [,c.2] [,c,3] [,c.4]
[1,]    1   0   0     1      4      7      3
[2,]    0   1   0     2      5      1      4
[3,]    0   0   1     3      6      2      5
> MN[,2] # Column 2
[1] 0 1 0
> MN[,"c.2"] # Column named "c.2"
[1] 4 5 6

(3)矩阵常用函数
矩阵相关的有用函数

2.3 Arrays(数组)

(1)创建数组:

#语法
array(data = NA, dim = length(data), dimnames = NULL)

#示例 ( 2 × 3 × 2数组)
> arr <- array(1:12, dim=c(2,3,2),
+            dimnames=list(c("A","B"), c("X","Y","Z"), c("N","M")))
> arr
, , N
  X Y Z
A 1 3 5
B 2 4 6

, , M
  X  Y  Z
A 7  9 11
B 8 10 12

#填充数字不够时
> arr2 <- array(0:9, dim=c(2,3,2),
+            dimnames=list(c("A","B"), c("X","Y","Z"), c("N","M")))
> arr2
, , N
  X Y Z
A 0 2 4
B 1 3 5

, , M
  X Y Z
A 6 8 0
B 7 9 1

注意
1)填充数组的数据个数不够时将循环使用向量中的数据进行填充;
2)dim 数组维度,用向量形式表示;
3)dimnames 默认为 NULL,可定义数组各维度的名称,类似于矩阵。

(2)数组元素提取

> arr <- array(1:12, dim=c(2,3,2),
+            dimnames=list(c("A","B"), c("X","Y","Z"), c("N","M")))
> arr
, , N
  X Y Z
A 1 3 5
B 2 4 6

, , M
  X  Y  Z
A 7  9 11
B 8 10 12

> arr[2,3,1] # Row 2, Column 3, Matrix 1
[1] 6
 > arr[,"Y",] # Column named "Y"
  N  M
A 3  9
B 4 10

> arr[2,,] # Row 2
  N  M
X 2  8
Y 4 10
Z 6 12

> arr[1:2,,"M"] # Rows 1 and 2, Matrix "M"
  X  Y  Z
A 7  9 11
B 8 10 12

(3)数组常用函数
数组相关的有用函数

2.4 Lists(列表)

(1)创建列表:

#语法:
lists(...)

#示例:
> lst <- list(num=c(1,2,4), "shlay", identity=diag(2))
> lst
$`num`
[1] 1 2 4

[[2]]
[1] "shlay"

$identity
     [,1] [,2]
[1,]    1    0
[2,]    0    1

注意
1)列表由多维向量组成,且各向量的数据形式可不同,这是list与上述三种数据结构的不同之一;
2)参数的格式为name=value,可以指定带名称或不带名称的参数。

(2)列表元素提取
列表元素提取方法:[[ ]] ; $ ;

> lst <- list(num=c(1,2,4), "shlay", identity=diag(2))
> lst[[2]] ## Second element of lst ,不带名称的提取
[1] "shlay"
> lst[["num"]] # Element named "num"
[1] 1 2 4
> lst$identity # Element named "identity"
      [,1] [,2]
[1,]    1    0
[2,]    0    1

> lst[[3]][1,] # First row of the third element
[1] 1 0

> lst[1:2] # Create a sublist of the first two elements
$`num`
[1] 1 2 4

[[2]]
[1] "shlay"

(3)列表常用函数
列表相关的有用函数

2.5 Dataframes(数据框)

一般将数据框看成矩阵的一种推广,它可以用矩阵的形式显示,且各列的数据形式可以不同,数据框每列是一个变量,每行是一个观测值。

(1)创建数据框:

#语法:
data.frame()

#示例:
> df<-data.frame(
+     Name=c("Alice","Becka","James","Jeffrey","John"),
+     Sex=c("F","F","M","M","M"),
+     Age=c(13,13,12,13,12),
+     Height=c(56.5,65.3,57.3,62.5,59.0),
+     Weight=c(84.0,98.0,83.0,84.0,99.5)
+ )
> df
     Name Sex Age Height Weight
1   Alice   F  13   56.5   84.0
2   Becka   F  13   65.3   98.0
3   James   M  12   57.3   83.0
4 Jeffrey   M  13   62.5   84.0
5    John   M  12   59.0   99.5

如果一个列表的各个成分满足数据框成分的要求,它可以用as.data.frame()函数强制转换为数据框,比如:

> lst<-list(
+     Name=c("Alice","Becka","James","Jeffrey","John"),
+     Sex=c("F","F","M","M","M"),
+     Age=c(13,13,12,13,12),
+     Height=c(56.5,65.3,57.3,62.5,59.0),
+     Weight=c(84.0,98.0,83.0,84.0,99.5)
+ )

> lst
$`Name`
[1] "Alice"   "Becka"   "James"   "Jeffrey" "John"   

$Sex
[1] "F" "F" "M" "M" "M"

$Age
[1] 13 13 12 13 12

$Height
[1] 56.5 65.3 57.3 62.5 59.0

$Weight
[1] 84.0 98.0 83.0 84.0 99.5

> as.data.frame(lst)
     Name Sex Age Height Weight
1   Alice   F  13   56.5   84.0
2   Becka   F  13   65.3   98.0
3   James   M  12   57.3   83.0
4 Jeffrey   M  13   62.5   84.0
5    John   M  12   59.0   99.5

(2)数据框元素提取
引用数据框元素的方法与矩阵相同,可以使用下标或者时下标向量,也可以使用名字或者名字向量,如:

> df<-data.frame(
+     Name=c("Alice","Becka","James","Jeffrey","John"),
+     Sex=c("F","F","M","M","M"),
+     Age=c(13,13,12,13,12),
+     Height=c(56.5,65.3,57.3,62.5,59.0),
+     Weight=c(84.0,98.0,83.0,84.0,99.5)
+ )

> df[1:2,3:5]
  Age Height Weight
1  13   56.5     84
2  13   65.3     98

> df[["Height"]]
[1] 56.5 65.3 57.3 62.5 59.0

> df$Weight
[1] 84.0 98.0 83.0 84.0 99.5

(3)数据框常用函数
以向量或者矩阵形式引用时对应操作与向量矩阵一样。
attach(df) #绑定连接
中间引用数据框的某变量时不需要$符号
detach() #取消连接,不需要含参数

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值