第四次课1-8-1数据结构复习和函数介绍

数据的随机取样如何可重复?

#从字母中随机取十个字母
>sample(letters,10)
>sample(letters,10)
 [1] "d" "c" "l" "q" "t" "v" "n" "b" "o" "u"
> sample(letters,10)
 [1] "d" "b" "i" "q" "o" "v" "l" "m" "w" "j"
> sample(letters,10)
 [1] "t" "q" "f" "j" "u" "g" "b" "x" "w" "h"
#我们可以看到每次取的都不一样,如果想让随机取样,可以重复。
> set.seed(10201)#数字随意
> sample(letters,10)
 [1] "a" "z" "r" "x" "h" "c" "f" "q" "w" "e"
> set.seed(10201)#数字随意
> sample(letters,10)
 [1] "a" "z" "r" "x" "h" "c" "f" "q" "w" "e"

如果从26字母抽200个呢?

sample(letters,200)
#报错,不能取比总体还大的样本。有句代码可以让中文报错改为英文。
Sys.setenv(LANGUAGE = "en")
#寻求语法的帮助,以sample为例。
?sample

sample的说明

sample(x, size, replace = FALSE, prob = NULL)
当replace=FALSE的时候说明不给重复,意思是取样后不放回。下面可以修改一下。

sample(letters,50,replace=T)
 [1] "m" "m" "i" "t" "o" "l" "o" "f" "l" "w" "d" "z" "x" "y" "v"
[16] "d" "s" "o" "q" "p" "t" "n" "f" "d" "b" "n" "d" "x" "g" "p"
[31] "m" "p" "c" "z" "h" "g" "d" "o" "x" "k" "i" "y" "z" "s" "w"
[46] "m" "o" "k" "d" "y"

想统计一下这里面共有多少个取值。(去重后算长度)

#unique 
x=sample(letters,50,replace=T)
> unique(x)
 [1] "q" "i" "o" "y" "n" "c" "p" "r" "x" "s" "l" "t" "z" "j" "g"
[16] "b" "d" "e" "w" "m" "h" "u"
length(unique(x))
[1] 22
table(x)
x
b c d e g h i j l m n o p q r s t u w x y z 
1 1 2 3 4 2 4 1 1 4 2 2 2 4 4 2 1 1 1 2 3 3 
> length(table(x))
[1] 22
> sum(!duplicated(x))
[1] 22

向量如何生成矩阵。

什么是矩阵,列的数据类型都相同,有两个维度,行数和列数。

可以用class判断是矩阵还是数据框。

x=1:10
> x
 [1]  1  2  3  4  5  6  7  8  9 10
> matrix(x)#默认是一列
      [,1]
 [1,]    1
 [2,]    2
 [3,]    3
 [4,]    4
 [5,]    5
 [6,]    6
 [7,]    7
 [8,]    8
 [9,]    9
[10,]   10
> matrix(x,nrow = 3)#nrow 直接记就是行数,number row别想这么多。
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8    1
[3,]    3    6    9    2
Warning message:
In matrix(x, nrow = 3) :
  data length [10] is not a sub-multiple or multiple of the number of rows [3]

向量长度相同,数据类型相同,可以连接在一起。

x1=sample(letters,5)
> x1=sample(letters,5);x1
[1] "r" "p" "h" "g" "k"
> x2=sample(letters,5);x2
[1] "x" "r" "t" "s" "g"
> x3=sample(letters,5);x3
[1] "i" "j" "g" "f" "s"
> cbind(x1,x2,x3)#按列拼接
     x1  x2  x3 
[1,] "r" "x" "i"
[2,] "p" "r" "j"
[3,] "h" "t" "g"
[4,] "g" "s" "f"
[5,] "k" "g" "s"

数据框

长度相同,数据类型不同,可以组成数据框。数据类型可以不同。

 #生成数据框,数据类型不同
> y1=sample(1:10,7);y1
[1] 10  1  6  5  2  7  4
> y2=(letters)
> y2=letters[2:8];y2
[1] "b" "c" "d" "e" "f" "g" "h"
> y3=sample(1:100,7);y3
[1] 75 29 46 62 18 99 85
> date.frame(y1,y2,y3)
Error in date.frame(y1, y2, y3) : could not find function "date.frame"
> data.frame(y1,y2,y3)
  y1 y2 y3
1 10  b 75
2  1  c 29
3  6  d 46
4  5  e 62
5  2  f 18
6  7  g 99
7  4  h 85

List 列表:长度可以不同、数据类型可以不同

列表没有行和列的概念,可以有多级元素。用到的不多,会取子集就可以。
可以包含向量 数据框 矩阵或数据框 列表
它的每个子集可以用[[1]] [[2]] [[3]] [[4]] 对应上面的

各种嵌套式的都是可以从外面往里写。绝对路径的可能换个电脑,文件夹命名各不相同,所以不推荐使用这种方法。

数据框属性描述 dimention row colum

1.维度(有几行几列)
2.行列的名字

 x=data.frame(a=1:10,b='gene');x
    a    b
1   1 gene
2   2 gene
3   3 gene
4   4 gene
5   5 gene
6   6 gene
7   7 gene
8   8 gene
9   9 gene
10 10 gene
> dim(x)
[1] 10  2
> row.names(x)
 [1] "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10"
> colnames(x)
[1] "a" "b"

数据框取子集(一个,一行,一列,多行多列)

#向量取子集
> x=c(1,8,9,1,6,5,6)
> x[5]
[1] 6
> x[c(1,5)]
[1] 1 6
> #取第一个和第六个
#数据框取子集,按照坐标来。
data.frame(gene=1:10,nrow=2)
   gene nrow
1     1    2
2     2    2
3     3    2
4     4    2
5     5    2
6     6    2
7     7    2
8     8    2
9     9    2
10   10    2
> z=data.frame(gene=1:10,nrow=2)
> z[4,1]
[1] 4
#如果不写列,就是默认包括所有列,这是逻辑的根本。
 z[2,]
  gene nrow
2    2    2
#中括号的逗号,表示维度的分隔。中括号用来取子集,小括号给函数划范围。
x=8:12;x
[1]  8  9 10 11 12
> x[1,5]
Error in x[1, 5] : incorrect number of dimensions
> x=[c(1,5)]
Error: unexpected '[' in "x=["
> x[c(1,3)]
[1]  8 10
#根据行名和列名也可以取子集
z[,'gene']#注意打名字的时候是文字,需要引号。
 [1]  1  2  3  4  5  6  7  8  9 10
#进阶理解,比如说我们要经常取某些子集,改的话还好改,赋值给的变量,改一次,后面的内容都改掉了。
 mm=c(1,2)
> z[,mm]
z[c(1,2,3),mm]
  gene nrow
1    1    2
2    2    2
3    3    2
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容