02 R语言入门——向量、矩阵与函数(基本数据分析技巧)

02 R语言入门——向量、矩阵与函数

2.1 对象(objects)

  • R处理的所有数据、变量、函数和结果都以对象的形式保存
  • 变量赋值:
    • a=2
    • a<-2
  • 区分大小写
  • 对象也不能用数字开头,但是数字可以放在中间或结尾
  • 可以用"."作为间隔
  • 不要使用保留名
    • NA
    • NaN
    • pi
    • month.abb
    • month.name

2.2 元素的类型

  • 对象是由各元素组成的。每个元素都有自己的数据类型。
类型 举例
数值型 Numeric 100, 0, -4.335
字符型 Character “China”
逻辑型 Logical TRUE,FALSE
因子型 Factor 表示不同类别
复数型 Complex 2+3i

2.3 运算符

  • 数学运算:+, -, *, /, ^(幂)
  • 比较运算:运算后给出判别结果(TRUE FALSE):>, <, >=, <=, ==, !=
  • 逻辑运算:与&, &&;或|, ||;非!
> a = 1
> a
[1] 1
> a <- 2
> a
[1] 2
> b = 3
> a > 2
[1] FALSE
> b > 2
[1] TRUE
> a > 2 & b > 2
[1] FALSE
> a > 2 | b > 2
[1] TRUE

2.4 对象的类

  • 向量 vector
  • 矩阵 matrix
  • 数组 array
  • 数据框 dataframe
    • 是由一个或几个向量和(或) 因子构成,它们必须是等长的,但可以是不同数据类型
  • 列表 list
    • 可以是不同类型甚至不同长度的向量、数据框甚至是列表的组合

2.5 类的判断

  • mode() 判断储存的类型
  • class() 判断数据的类
  • is.numeric() 返回TRUE或FALSE
  • is.logical() 是否为逻辑值
  • is.character 是否为字符串
  • is.null 是否为空
  • is.na 是否为na
    举例
> a = c(1,2,3); b = c("x","y","z")
> is.numeric(a) #a为数值型,返回TRUE
[1] TRUE
> is.numeric(b) #b为字符串型,返回FALSE
[1] FALSE

2.6 序列和向量

#生成了从-1到10,长度为100位的序列。R自动进行了平均化处理。
> z = seq(-1, 10, length=100) #length也可以用缩写len
> z 
  [1] -1.0000000 -0.8888889 -0.7777778 -0.6666667 -0.5555556 -0.4444444 -0.3333333 -0.2222222 -0.1111111  0.0000000
 [11]  0.1111111  0.2222222  0.3333333  0.4444444  0.5555556  0.6666667  0.7777778  0.8888889  1.0000000  1.1111111
 [21]  1.2222222  1.3333333  1.4444444  1.5555556  1.6666667  1.7777778  1.8888889  2.0000000  2.1111111  2.2222222
 [31]  2.3333333  2.4444444  2.5555556  2.6666667  2.7777778  2.8888889  3.0000000  3.1111111  3.2222222  3.3333333
 [41]  3.4444444  3.5555556  3.6666667  3.7777778  3.8888889  4.0000000  4.1111111  4.2222222  4.3333333  4.4444444
 [51]  4.5555556  4.6666667  4.7777778  4.8888889  5.0000000  5.1111111  5.2222222  5.3333333  5.4444444  5.5555556
 [61]  5.6666667  5.7777778  5.8888889  6.0000000  6.1111111  6.2222222  6.3333333  6.4444444  6.5555556  6.6666667
 [71]  6.7777778  6.8888889  7.0000000  7.1111111  7.2222222  7.3333333  7.4444444  7.5555556  7.6666667  7.7777778
 [81]  7.8888889  8.0000000  8.1111111  8.2222222  8.3333333  8.4444444  8.5555556  8.6666667  8.7777778  8.8888889
 [91]  9.0000000  9.1111111  9.2222222  9.3333333  9.4444444  9.5555556  9.6666667  9.7777778  9.8888889 10.0000000
#生成以10为起点,-1为终点,步长为-1的序列
z = seq(10, -1, -1) 
> z
 [1] 10  9  8  7  6  5  4  3  2  1  0 -1
#直接生成从10到-1的序列,形式为整数
> z = 10:-1
> z
 [1] 10  9  8  7  6  5  4  3  2  1  0 -1
#生成重复元素的序列,3重复1次,4重复2次,5重复3次
> x = rep(3:5, 1:3)
> x
[1] 3 4 4 5 5 5
#将序列(1,1,4,5,1,4)重复2遍
> x = rep(c(1,1,4,5,1,4), 2)
> x
 [1] 1 1 4 5 1 4 1 1 4 5 1 4
 #总之,注意元素的对应逻辑
 > x = rep(c(1,10),c(4,5))
> x
[1]  1  1  1  1 10 10 10 10 10
> w = c(1,3,x,z);w[3] #取出w中的第三个元素(注意此时x=c(1,1,1,1,10,10,10,10,10))
[1] 1
> w
 [1]  1  3  1  1  1  1 10 10 10 10 10 10  9  8  7  6  5  4  3  2  1  0 -1

2.7 向量运算

> z = c("no cat","has","nine","tails")
> z[1]=="no cat" #对z中第一个元素是否等于"no cat"进行逻辑判断,返回TRUE
[1] TRUE
> rev(z) #对z中的元素进行反向排序
[1] "tails"  "nine"   "has"    "no cat"

2.8 向量名字

对元素进行命名。

> x = 1:3; names(x)=LETTERS[1:3]
> x
A B C 
1 2 3 

2.9 向量的大小次序

> z = sample(1:100, 10, rep=T); z
 [1] 44 80 35 49 44  5 33 64 73 17
 #从1:100里随机抽样10个数。replace=T说明已经抽取过的元素仍有可能重复出现。
 > z = sample(1:100,10,rep=FALSE)
> z
 [1] 94 17 97  9  8 36 48 64 16 20
 #replace=F,不放回抽样。

 ##比较order(),sort()。
 ##对于order,返回的值表示位置,依次对应向量最小值、次小值、...最大值
 ##对于sort,返回的值会对向量元素排序。
 > z = sample(1:100,10,rep=FALSE)
> z
 [1] 24 12 45 90 36 78 88 55 56 95
> order(z)
 [1]  2  1  5  3  8  9  6  7  4 10
> sort(z)
 [1] 12 24 36 45 55 56 78 88 90 95

其他操作·补充

> x = c(1,4,7)
> x[2]
[1] 4
> (c(1,3,5)+5)[2]
[1] 8
> #可以单独改变一个元素的值,如
> x[2]=125
> x
[1]   1 125   7
> x[c(1,3)]=c(144,169)
> x
[1] 144 125 169

2.10 R的函数

  • mean() 求均值
  • sum() 求和
  • plot() 画图
  • sort() 排序
  • sd() 标准差
  • var() 方差
  • binom.test() 对二项分布中的比率p进行检验
  • fisher.test() F检验判断两样本方差齐性
  • chisq.test() χ2检验判断类别一致性等
  • log() 对数
  • log10() lg
  • exp() e^x
  • sin()
  • cos()
  • tan()
  • asin() arcsin
  • acos()
    ….
    函数形式:函数(输入数据,参数=…)
    如果没有指定,则参数以默认值为准。例如:
    • 平均值mean(x, trim=0, na.rm=FALSE, …)
    • 线性模型 lm(y~x,data=test)

2.11 构建矩阵

1. 随机生成20个0~1的小数,组合成4*5的矩阵

> x = matrix(runif(20),4,5)
> x
           [,1]       [,2]      [,3]      [,4]      [,5]
[1,] 0.27008890 0.57096324 0.6646762 0.8309818 0.6108379
[2,] 0.66096405 0.03655500 0.6600138 0.1539677 0.8507358
[3,] 0.06422796 0.61947820 0.1168485 0.1618244 0.8271617
[4,] 0.97114728 0.01797554 0.2268782 0.6198094 0.9687446
  1. 生成元素为1:20,按列排列的4*5矩阵
> x = matrix(1:20,4,5);x
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14   18
[3,]    3    7   11   15   19
[4,]    4    8   12   16   20
  1. 若要按行排列,需要修改参数byrow=T
> x = matrix(1:20,4,5,byrow = TRUE);x
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    6    7    8    9   10
[3,]   11   12   13   14   15
[4,]   16   17   18   19   20

2.12 矩阵的行和列(子集)

> x = matrix(rnorm(24),4,6); x #随机24个标准正态分布
            [,1]       [,2]       [,3]       [,4]       [,5]        [,6]
[1,] -1.15665512 2.00520157  0.3012377  2.2490408  0.9002427 -0.93464240
[2,]  0.32517047 0.01256269  1.6847352 -1.4311658 -1.5370565 -0.97347666
[3,] -0.08171387 0.48406661 -0.3943626  0.1570139 -0.2758359 -2.15406500
[4,] -0.17095056 0.07226580 -0.1293965 -0.3290969  0.6597828  0.06926688
-----------------------------------------------------------------------
> nrow(x) #行数
[1] 4
> ncol(x) #列数
[1] 6
> dim(x)  #行列数
[1] 4 6
-----------------------------------------------------------------------
> x[c(2,1),]  #取第二行和第一行
           [,1]       [,2]      [,3]      [,4]       [,5]       [,6]
[1,]  0.3251705 0.01256269 1.6847352 -1.431166 -1.5370565 -0.9734767
[2,] -1.1566551 2.00520157 0.3012377  2.249041  0.9002427 -0.9346424
-----------------------------------------------------------------------
> x[,c(1,3)]  #取第一列和第三列
            [,1]       [,2]
[1,] -1.15665512  0.3012377
[2,]  0.32517047  1.6847352
[3,] -0.08171387 -0.3943626
[4,] -0.17095056 -0.1293965
-----------------------------------------------------------------------
> x[2,1]  #取第二行第一个元素
[1] 0.3251705
> x[x[,1]>0,1]  #取第一列中大于0的元素
[1] 0.3251705
-----------------------------------------------------------------------
> sum(x[,1]>0)  #第一列中大于0的元素的个数
[1] 1
> sum(x[,1]<=0) #第一列中小于等于0的元素的个数
[1] 3
-----------------------------------------------------------------------
> x[,-c(1,3)]  #x去掉第一列和第三列
           [,1]       [,2]       [,3]        [,4]
[1,] 2.00520157  2.2490408  0.9002427 -0.93464240
[2,] 0.01256269 -1.4311658 -1.5370565 -0.97347666
[3,] 0.48406661  0.1570139 -0.2758359 -2.15406500
[4,] 0.07226580 -0.3290969  0.6597828  0.06926688
-----------------------------------------------------------------------
> x[-2,-c(1,3)]  #x去掉第二行,第一列以及第三列
          [,1]       [,2]       [,3]        [,4]
[1,] 2.0052016  2.2490408  0.9002427 -0.93464240
[2,] 0.4840666  0.1570139 -0.2758359 -2.15406500
[3,] 0.0722658 -0.3290969  0.6597828  0.06926688

2.13 命名矩阵的行和列

通过以下命令可以给矩阵的行列命名。

> x = matrix(1:12, nrow = 3, dimnames = list(c("I","II","III"),paste("X",1:4,sep="")))
> x
    X1 X2 X3 X4
I    1  4  7 10
II   2  5  8 11
III  3  6  9 12
  • list为行命名,paste为列命名。
  • 注意sep的用法。
  • 再比如:
> x = matrix(1:12, nrow=3, dimnames=list(c("I","II","III"),paste("X",1:4,sep="_")))
> x
    X_1 X_2 X_3 X_4
I     1   4   7  10
II    2   5   8  11
III   3   6   9  12

2.14 data.frame(数据框)

在R语言中,数据框(dataframe)组织数据的结构与矩阵相似,但是其各列的数据类型可以不相同。
一般数据框的每列是一个变量,每行是一个观测样本。虽然,数据框内不同的列可以是不同的数据模式,但是数据框内每列的长度必须相同。

> x = matrix(1:6,2,3)
> x = as.data.frame(x)
> x
  V1 V2 V3
1  1  3  5
2  2  4  6
-----------------------------------------------------------------------
> x$V2 #查看V2的值
[1] 3 4
> mode(x) #查看x储存类型(注意数据库其实是列表的一种特殊情况)
[1] "list"
> class(x) #查看x的类别(注意和mode的区别)
[1] "data.frame"
> objects() #objects()用于显示目前在R中存储的变量的名称
 [1] "a"   "A1"  "A2"  "cpr" "e"   "eor" "i"   "p"   "si"  "w"   "x"   "y"  
> objects(x) #显示目前在x中存储的变量的名称
[1] "V1" "V2" "V3"
-----------------------------------------------------------------------
> attributes(x) #查看数据框x的各种属性
$names #列名
[1] "V1" "V2" "V3"

$class #x的数据种类
[1] "data.frame"

$row.names #x的行名
[1] 1 2

现在构造一个具体的数据框。(矩阵x与上面相同。)

> names(x)=c("TOYOTA","GM","HUNDA")
> row.names(x)=c("2001","2002")
> x
     TOYOTA GM HUNDA
2001      1  3     5
2002      2  4     6
> x$GM
[1] 3 4

2.15 attach()的作用

#在2.14的基础上,用attach指令对数据实现路径设定或绑定
> attach(x)
The following objects are masked from x (pos = 3):

    GM, HUNDA, TOYOTA
> GM
[1] 3 4
#而detach就会撤销路径
> detach(x)
> GM
错误: 找不到对象'GM'

2.16 R自带数据集

输入data(),可以查看R自带的数据集。
02 R语言入门——向量、矩阵与函数(基本数据分析技巧)_第1张图片
在这里输入data(CO2)就可以导入CO2这个数据集。
查看数据集只需要再输入CO2
02 R语言入门——向量、矩阵与函数(基本数据分析技巧)_第2张图片

2.17 其他途径

要存取其他功能包中的数据,可以使用package参数
data(package=“blabla”)
data(Puromycin, package = “blabla”)
如果某个功能包已经由函数library()挂接了,那么它的数据集也自动的包含在了搜索路径中。所以
library(nls)
data()
data(Puromycin)
将列出当前已挂接的所有数据集(至少包含basenls)。并且从第一个能够找到puromycin的功能包中载入这个数据集。

你可能感兴趣的:(R语言)