R语言基础学习记录4:重要函数

时间: 2018-07-18(学习) 2018-07-22(学习记录)
教程:慕课网 《R语言基础》 讲师:Angelayuan
补充内容: R语言常用函数总结大全gl()函数
学习内容:课程第四章:重要函数的使用


重要函数

1.lapply & sapply

如:
str()函数,structure,紧凑地显示对象内部结构,即对象里有什么。

> str(lapply)
function (X, FUN, ...) 
> x <- list(a=1:10, b=c(11,21,31,41,51))
> x
$`a`
 [1]  1  2  3  4  5  6  7  8  9 10

$b
[1] 11 21 31 41 51

> lapply(x,mean)  # 对列表x中的每个元素求平均
$`a`
[1] 5.5

$b
[1] 31

> class(lapply(x,mean))
[1] "list"

可以看出,lapply()函数返回的对象类型为列表。

> x1 <- 1:4   # runif 默认从(0,1)中抽取
> runif(5)
[1] 0.88503752 0.06881155 0.38453875 0.54453272 0.36140365
> lapply(x1, runif)
[[1]]
[1] 0.4489252

[[2]]
[1] 0.4759847 0.4693249

[[3]]
[1] 0.9319213 0.8022253 0.8239708

[[4]]
[1] 0.60829270 0.59905232 0.07741152 0.83186815

> class(lapply(x1, runif))
[1] "list"

可以看出,该程序的实质是对x1中的每一个元素使用runif函数,runif函数中的参数即为x1中的元素内容。返回的对象是一个列表。

> lapply(x1, runif,min=0,max=100)
[[1]]
[1] 77.53334

[[2]]
[1] 19.071435  5.407963

[[3]]
[1] 75.00840 89.83947 19.51815

[[4]]
[1] 66.83073 92.35758 42.35655 30.18025

对x1使用runif函数,”min=0,max=100”作用于runif函数,意思为,使抽取的最小值为0,最大值为100。

> x2 <- list(a=matrix(1:6,2,3),b=matrix(4:7,2,2))
> x2
$`a`
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

$b
     [,1] [,2]
[1,]    4    6
[2,]    5    7

> lapply(x2,function(m) m[1,])
$`a`
[1] 1 3 5

$b
[1] 4 6

对x2使用function(m)函数,function(m)函数的作用是抽取m的矩阵的第一行,格式为lapply(对象,函数名 函数内容)。

> sapply(x,mean)
   a    b 
 5.5 31.0 
> class(sapply(x,mean))
[1] "numeric"

可以看出,sapply函数与lapply的作用基本一致,但所得结果与lapply函数结果相比较为简单。

2.apply

apply函数是对数组对象沿着其某一维度进行数据处理的函数,其格式为:apply(数组/数组名,维度,函数/函数名)。
如:

> x <- matrix(1:16,4,4)
> x
     [,1] [,2] [,3] [,4]
[1,]    1    5    9   13
[2,]    2    6   10   14
[3,]    3    7   11   15
[4,]    4    8   12   16
> apply(x,2,mean)   # 对矩阵x的列求平均
[1]  2.5  6.5 10.5 14.5
> apply(x,1,sum)   # 对矩阵x的行求和
[1] 28 32 36 40
> class(apply(x,2,mean))
[1] "numeric"

可以看出,apply函数返回的对象是数值型。矩阵的第1个维度为行,第2个维度为列。

rowSums函数、rowMeans函数、colSums函数和colMeans函数是对矩阵进行求平均,求和的函数,作用分别为:对行求和、对行求平均、对列求和、对列求平均。例:

> rowSums(x)
[1] 28 32 36 40
> rowMeans(x)
[1]  7  8  9 10
> colSums(x)
[1] 10 26 42 58
> colMeans(x)
[1]  2.5  6.5 10.5 14.5
> x1 <- matrix(rnorm(100),10,10)

rnorm(100) :从正态总体中抽取100个数。

> x2 <- as.vector(x1)

将x1转化为一个向量,R默认按先列后行的顺序,如果想要按行转化,应输入x2 <-

as.vector(t(x1))[-length(x1)]。
> quantile(x1)
         0%         25%         50%         75%        100% 
-2.52188938 -0.75854793  0.01278413  0.50218606  2.53157675 
> quantile(x2)
         0%         25%         50%         75%        100% 
-2.52188938 -0.76862008 -0.03151691  0.51595128  2.53157675 

可以看出,直接对一个矩阵使用quantile函数,其实质就是对矩阵中所有元素求百分位数,如果想要对每一行或列分别求百分位数,需要使用apply函数。

对x1的每行分别求25%分位点和75%分位点:

> apply(x1,1,quantile,probs=c(0.25,0.75))
          [,1]       [,2]       [,3]       [,4]       [,5]       [,6]
25% -0.7858875 -0.2201546 -0.6949031 -0.5816118 -0.8659978 -0.8314179
75%  0.1181953  0.3378439  0.4806605  0.5125266  0.3238839  0.4293929
          [,7]       [,8]       [,9]      [,10]
25% -1.0360972 -0.5325346 -0.8300560 -0.6952302
75%  0.3289841  1.3373911  0.8246093  1.1712271
> class(apply(x1,1,quantile,probs=c(0.25,0.75)))
[1] "matrix"
> x2 <- array(rnorm(2*3*4),c(2,3,4))
> apply(x2,c(1,2),mean)
           [,1]        [,2]       [,3]
[1,] -0.1303495 -0.15920508 -0.3258256
[2,] -0.4381158 -0.03596368 -0.1235411
> apply(x2,c(1,3),mean)
           [,1]      [,2]        [,3]       [,4]
[1,]  0.1140517 0.6003327 -0.15505303 -1.3798382
[2,] -0.7958814 0.1819626  0.07241478 -0.2553234
> apply(x2,c(2,3),mean)
             [,1]        [,2]       [,3]       [,4]
[1,] -0.005381797  0.63799949 -0.5805872 -1.1889610
[2,] -0.832683878  0.54533972  0.7107023 -0.8136957
[3,] -0.184678873 -0.00989629 -0.2540725 -0.4500857

3.mapply

mapply是lapply的多元版本,格式为:mapply(函数/函数名,数据,函数相关的参数)。
如:

> list(rep(1,4),rep(2,3),rep(3,2),rep(4,1))
[[1]]
[1] 1 1 1 1

[[2]]
[1] 2 2 2

[[3]]
[1] 3 3

[[4]]
[1] 4

> mapply(rep,1:4,4:1)
[[1]]
[1] 1 1 1 1

[[2]]
[1] 2 2 2

[[3]]
[1] 3 3

[[4]]
[1] 4

可以看出,使用该程序生成列表与直接使用list函数套用rep函数返回的结果是一样的,mapply函数中第一个参数是 rep函数,第二个参数是rep函数的第一个参数,即返回对象的数据内容,第三个参数是rep函数的第二个参数,即重复次数。

建立一个函数,函数名为s,有三个参数,内容是从随机总体中抽取n个数,函数的第一个参数是抽取的数据的数量n,第二、三个参数分别是总体的均值和方差:

> s <- function(n, mean, std)
   {
   rnorm(n, mean, std)
  }
> s(4,0,10)
[1]  6.187130 12.654355  6.864007 -5.914964
> mapply(s,1:5,5:1,2)
[[1]]
[1] 4.391382

[[2]]
[1] 6.527374 5.407532

[[3]]
[1] 3.110394 2.861490 1.062697

[[4]]
[1] 1.0589855 0.4850307 1.8892080 2.5943264

[[5]]
[1]  1.4702287 -0.6490873  3.1964053  3.4455908  2.3174738

> class(mapply(s,1:5,5:1,2))
[1] "list"

可以看出,上述程序的作用是生成一个列表,第一个元素是从均值为1,标准差为2的随机总体中抽取1个数,第二个元素是从均值为2,标准差为2的随机总体中抽取2个数。

> list(s(1,5,2),s(2,4,2),s(3,3,2),s(4,2,2),s(5,1,2))
[[1]]
[1] 2.974112

[[2]]
[1] 7.391563 2.021349

[[3]]
[1] 1.011845 5.978735 5.310789

[[4]]
[1] 4.662467 1.260659 3.953015 3.240760

[[5]]
[1]  3.8650932 -0.4452322  1.4689271  0.8915785  0.2668686

4.tapply

tapply函数对向量的子集进行操作,格式为:tapply(向量,因子/因子列表,函数/函数名)。
如:

> x <- c(rnorm(5),runif(5),rnorm(5,1))
> x
 [1]  0.59968952 -0.43799554 -1.88220634 -0.01000788 -1.40232262  0.21686806
 [7]  0.67216713  0.87636971  0.81726776  0.16794590  0.67250517  0.80001548
[13] -0.11893751  1.80148422  1.95975380

x为一个向量,其中前五个数来自于正态分布,中间五个来自于均匀分布,最后五个来自于均值为1,标准差为0的正态分布

按级别对x进行求均值,x的级别与f中各级别位置一一对应,即每5个数为一个级别,gl函数的具体用法在本文附录部分有补充。例:

> f <- gl(3,5)   # 生成三个级别,每个级别5个数
> f
 [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
Levels: 1 2 3
> class(f)
[1] "factor"
> tapply(x,f,mean)
         1          2          3 
-0.6265686  0.5501237  1.0229642 
> tapply(x,f,mean,simplify = FALSE)
$`1`
[1] -0.6265686

$`2`
[1] 0.5501237

$`3`
[1] 1.022964

tapply函数默认生成紧凑形式,在函数中添加参数”simplify = FALSE”可以得到一个没有化简的列表。

> class(tapply(x,f,mean))
[1] "array"
> class(tapply(x,f,mean,simplify = FALSE))
[1] "array"

可以看出,不管是不是紧凑格式,tapply函数生成的均为数组。

5.分类(split函数)

split函数根据因子或因子列表将向量或其他对象分组,通常用与lapply函数一起使用,格式为split(向量/列表/数据框,因子/因子列表)。
如:

> x <- c(rnorm(5),runif(5),rnorm(5,1))
> x
 [1]  1.52483675  0.13324386 -1.78415881 -0.32646306  0.94922664  0.08602672
 [7]  0.16865164  0.21825480  0.32657114  0.21307498  3.59512887  2.77402661
[13]  1.16457362  0.29169987 -0.38259887
> f <- gl(3,5)
> split(x,f)
$`1`
[1]  1.5248367  0.1332439 -1.7841588 -0.3264631  0.9492266

$`2`
[1] 0.08602672 0.16865164 0.21825480 0.32657114 0.21307498

$`3`
[1]  3.5951289  2.7740266  1.1645736  0.2916999 -0.3825989

使用split函数对x进行分类,按与f中水平元素一一对应的方法进行分类。

> class(split(x,f))
[1] "list"

可以看出,使用split函数进行分类,返回的对象类型是列表

lapply函数与split函数结合使用,split函数返回的列表中的元素分别求平均:

> lapply(split(x,f),mean)
$`1`
[1] 0.09933708

$`2`
[1] 0.2025159

$`3`
[1] 1.488566
> sapply(split(x,f),mean)
         1          2          3 
0.09933708 0.20251586 1.48856602 
> head(airquality)
  Ozone Solar.R Wind Temp Month Day
1    41     190  7.4   67     5   1
2    36     118  8.0   72     5   2
3    12     149 12.6   74     5   3
4    18     313 11.5   62     5   4
5    NA      NA 14.3   56     5   5
6    28      NA 14.9   66     5   6

将airquality数据集按月份进行分类:

> s <- split(airquality,airquality$Month)
> s
$`5`
   Ozone Solar.R Wind Temp Month Day
1     41     190  7.4   67     5   1
2     36     118  8.0   72     5   2
3     12     149 12.6   74     5   3
4     18     313 11.5   62     5   4
5     NA      NA 14.3   56     5   5
6     28      NA 14.9   66     5   6
7     23     299  8.6   65     5   7
8     19      99 13.8   59     5   8
9      8      19 20.1   61     5   9
10    NA     194  8.6   69     5  10
11     7      NA  6.9   74     5  11
12    16     256  9.7   69     5  12
13    11     290  9.2   66     5  13
14    14     274 10.9   68     5  14
15    18      65 13.2   58     5  15
16    14     334 11.5   64     5  16
17    34     307 12.0   66     5  17
18     6      78 18.4   57     5  18
19    30     322 11.5   68     5  19
20    11      44  9.7   62     5  20
21     1       8  9.7   59     5  21
22    11     320 16.6   73     5  22
23     4      25  9.7   61     5  23
24    32      92 12.0   61     5  24
25    NA      66 16.6   57     5  25
26    NA     266 14.9   58     5  26
27    NA      NA  8.0   57     5  27
28    23      13 12.0   67     5  28
29    45     252 14.9   81     5  29
30   115     223  5.7   79     5  30
31    37     279  7.4   76     5  31

$`6`
   Ozone Solar.R Wind Temp Month Day
32    NA     286  8.6   78     6   1
33    NA     287  9.7   74     6   2
34    NA     242 16.1   67     6   3
35    NA     186  9.2   84     6   4
36    NA     220  8.6   85     6   5
37    NA     264 14.3   79     6   6
38    29     127  9.7   82     6   7
39    NA     273  6.9   87     6   8
40    71     291 13.8   90     6   9
41    39     323 11.5   87     6  10
42    NA     259 10.9   93     6  11
43    NA     250  9.2   92     6  12
44    23     148  8.0   82     6  13
45    NA     332 13.8   80     6  14
46    NA     322 11.5   79     6  15
47    21     191 14.9   77     6  16
48    37     284 20.7   72     6  17
49    20      37  9.2   65     6  18
50    12     120 11.5   73     6  19
51    13     137 10.3   76     6  20
52    NA     150  6.3   77     6  21
53    NA      59  1.7   76     6  22
54    NA      91  4.6   76     6  23
55    NA     250  6.3   76     6  24
56    NA     135  8.0   75     6  25
57    NA     127  8.0   78     6  26
58    NA      47 10.3   73     6  27
59    NA      98 11.5   80     6  28
60    NA      31 14.9   77     6  29
61    NA     138  8.0   83     6  30

$`7`
   Ozone Solar.R Wind Temp Month Day
62   135     269  4.1   84     7   1
63    49     248  9.2   85     7   2
64    32     236  9.2   81     7   3
65    NA     101 10.9   84     7   4
66    64     175  4.6   83     7   5
67    40     314 10.9   83     7   6
68    77     276  5.1   88     7   7
69    97     267  6.3   92     7   8
70    97     272  5.7   92     7   9
71    85     175  7.4   89     7  10
72    NA     139  8.6   82     7  11
73    10     264 14.3   73     7  12
74    27     175 14.9   81     7  13
75    NA     291 14.9   91     7  14
76     7      48 14.3   80     7  15
77    48     260  6.9   81     7  16
78    35     274 10.3   82     7  17
79    61     285  6.3   84     7  18
80    79     187  5.1   87     7  19
81    63     220 11.5   85     7  20
82    16       7  6.9   74     7  21
83    NA     258  9.7   81     7  22
84    NA     295 11.5   82     7  23
85    80     294  8.6   86     7  24
86   108     223  8.0   85     7  25
87    20      81  8.6   82     7  26
88    52      82 12.0   86     7  27
89    82     213  7.4   88     7  28
90    50     275  7.4   86     7  29
91    64     253  7.4   83     7  30
92    59     254  9.2   81     7  31

$`8`
    Ozone Solar.R Wind Temp Month Day
93     39      83  6.9   81     8   1
94      9      24 13.8   81     8   2
95     16      77  7.4   82     8   3
96     78      NA  6.9   86     8   4
97     35      NA  7.4   85     8   5
98     66      NA  4.6   87     8   6
99    122     255  4.0   89     8   7
100    89     229 10.3   90     8   8
101   110     207  8.0   90     8   9
102    NA     222  8.6   92     8  10
103    NA     137 11.5   86     8  11
104    44     192 11.5   86     8  12
105    28     273 11.5   82     8  13
106    65     157  9.7   80     8  14
107    NA      64 11.5   79     8  15
108    22      71 10.3   77     8  16
109    59      51  6.3   79     8  17
110    23     115  7.4   76     8  18
111    31     244 10.9   78     8  19
112    44     190 10.3   78     8  20
113    21     259 15.5   77     8  21
114     9      36 14.3   72     8  22
115    NA     255 12.6   75     8  23
116    45     212  9.7   79     8  24
117   168     238  3.4   81     8  25
118    73     215  8.0   86     8  26
119    NA     153  5.7   88     8  27
120    76     203  9.7   97     8  28
121   118     225  2.3   94     8  29
122    84     237  6.3   96     8  30
123    85     188  6.3   94     8  31

$`9`
    Ozone Solar.R Wind Temp Month Day
124    96     167  6.9   91     9   1
125    78     197  5.1   92     9   2
126    73     183  2.8   93     9   3
127    91     189  4.6   93     9   4
128    47      95  7.4   87     9   5
129    32      92 15.5   84     9   6
130    20     252 10.9   80     9   7
131    23     220 10.3   78     9   8
132    21     230 10.9   75     9   9
133    24     259  9.7   73     9  10
134    44     236 14.9   81     9  11
135    21     259 15.5   76     9  12
136    28     238  6.3   77     9  13
137     9      24 10.9   71     9  14
138    13     112 11.5   71     9  15
139    46     237  6.9   78     9  16
140    18     224 13.8   67     9  17
141    13      27 10.3   76     9  18
142    24     238 10.3   68     9  19
143    16     201  8.0   82     9  20
144    13     238 12.6   64     9  21
145    23      14  9.2   71     9  22
146    36     139 10.3   81     9  23
147     7      49 10.3   69     9  24
148    14      20 16.6   63     9  25
149    30     193  6.9   70     9  26
150    NA     145 13.2   77     9  27
151    14     191 14.3   75     9  28
152    18     131  8.0   76     9  29
153    20     223 11.5   68     9  30
> table(airquality$Month)
 5  6  7  8  9 
31 30 31 31 30 

可以看出,对数据集中每一月的数量进行统计,其实质是计算Month对应的列中不同值出现的次数。

对s中每一元素分别求列平均:

> lapply(s,function(x) colMeans(x[,c("Ozone","Wind","Temp")]))
$`5`
   Ozone     Wind     Temp 
      NA 11.62258 65.54839 

$`6`
   Ozone     Wind     Temp 
      NA 10.26667 79.10000 

$`7`
    Ozone      Wind      Temp 
       NA  8.941935 83.903226 

$`8`
    Ozone      Wind      Temp 
       NA  8.793548 83.967742 

$`9`
Ozone  Wind  Temp 
   NA 10.18 76.90 
> sapply(s,function(x) colMeans(x[,c("Ozone","Wind","Temp")]))
             5        6         7         8     9
Ozone       NA       NA        NA        NA    NA
Wind  11.62258 10.26667  8.941935  8.793548 10.18
Temp  65.54839 79.10000 83.903226 83.967742 76.90
> sapply(s,function(x) colMeans(x[,c("Ozone","Wind","Temp")],na.rm = TRUE))
             5        6         7         8        9
Ozone 23.61538 29.44444 59.115385 59.961538 31.44828
Wind  11.62258 10.26667  8.941935  8.793548 10.18000
Temp  65.54839 79.10000 83.903226 83.967742 76.90000

R默认对与含有缺失值的数据无法求平均值,即所得结果为缺失值,在函数中加入参数” na.rm = TRUE “,计算平均值时返回对象是对除确实值以外的值求平均值。

6.排序(sort函数 & order函数 &rank函数)

如:

> x <- data.frame(v1=1:5, v2=c(10,7,9,6,8), v3=11:15, v4=c(1,1,2,2,1))
> x
  v1 v2 v3 v4
1  1 10 11  1
2  2  7 12  1
3  3  9 13  2
4  4  6 14  2
5  5  8 15  1
> sort(x$v2)
[1]  6  7  8  9 10
> class(x$v2)
[1] "numeric"
> sort(x$v2, decreasing = TRUE)
[1] 10  9  8  7  6

可以使用sort函数对数据进行排序,返回排序后的数据,例子中是对x的v2列进行排序,返回对象内容只有进行排序的部分,该函数默认为升序,使用降序需在函数中加入参数” decreasing = TRUE “。

order函数返回的结果是排序后的数据在原数据中的下标,在排序依据前加”-“或” decreasing = TRUE “可以按照降序进行排序。例:

> order(x$v2)
[1] 4 2 5 3 1
> order(-x$v2)
[1] 1 3 5 2 4
> class(order(x$v2))
[1] "integer"

将数据框x按v2进行升序排列:

> x[order(x$v2),]
  v1 v2 v3 v4
4  4  6 14  2
2  2  7 12  1
5  5  8 15  1
3  3  9 13  2
1  1 10 11  1

在order中的排序依据可以有多个,排序时按排序依据输入的先后顺序进行排序。例:

> class(x[order(x$v2),])
[1] "data.frame"
> x[order(x$v4,x$v2),]
  v1 v2 v3 v4
2  2  7 12  1
5  5  8 15  1
1  1 10 11  1
4  4  6 14  2
3  3  9 13  2
> x[order(x$v4,x$v2,decreasing = TRUE),]
  v1 v2 v3 v4
3  3  9 13  2
4  4  6 14  2
1  1 10 11  1
5  5  8 15  1
2  2  7 12  1

rank函数返回原数据的次序号。例:

> rank(x$v2)
[1] 5 2 4 1 3

7.总结数据信息

如:
使用head函数和tail函数,如果函数中参数只有用数据集名,则R默认显示行数为6,如果想要更改显示行数,需要在数据集名后加上想要返回的对象的行数。例:

> head(airquality)   # 返回数据集的前6行
  Ozone Solar.R Wind Temp Month Day
1    41     190  7.4   67     5   1
2    36     118  8.0   72     5   2
3    12     149 12.6   74     5   3
4    18     313 11.5   62     5   4
5    NA      NA 14.3   56     5   5
6    28      NA 14.9   66     5   6
> tail(airquality)   # 返回数据集的后6行
    Ozone Solar.R Wind Temp Month Day
148    14      20 16.6   63     9  25
149    30     193  6.9   70     9  26
150    NA     145 13.2   77     9  27
151    14     191 14.3   75     9  28
152    18     131  8.0   76     9  29
153    20     223 11.5   68     9  30
> head(airquality,10)   #返回数据集的前10行
   Ozone Solar.R Wind Temp Month Day
1     41     190  7.4   67     5   1
2     36     118  8.0   72     5   2
3     12     149 12.6   74     5   3
4     18     313 11.5   62     5   4
5     NA      NA 14.3   56     5   5
6     28      NA 14.9   66     5   6
7     23     299  8.6   65     5   7
8     19      99 13.8   59     5   8
9      8      19 20.1   61     5   9
10    NA     194  8.6   69     5  10

使用summary函数可以返回数据集按每一列进行的统计信息,即最小值、第一分位点、中位数、均值、第三分位点、最大值和缺失值的数量。例:

> summary(airquality)   # 显示数据集的主要信息
     Ozone           Solar.R           Wind             Temp      
 Min.   :  1.00   Min.   :  7.0   Min.   : 1.700   Min.   :56.00  
 1st Qu.: 18.00   1st Qu.:115.8   1st Qu.: 7.400   1st Qu.:72.00  
 Median : 31.50   Median :205.0   Median : 9.700   Median :79.00  
 Mean   : 42.13   Mean   :185.9   Mean   : 9.958   Mean   :77.88  
 3rd Qu.: 63.25   3rd Qu.:258.8   3rd Qu.:11.500   3rd Qu.:85.00  
 Max.   :168.00   Max.   :334.0   Max.   :20.700   Max.   :97.00  
 NA's   :37       NA's   :7                                       
     Month            Day      
 Min.   :5.000   Min.   : 1.0  
 1st Qu.:6.000   1st Qu.: 8.0  
 Median :7.000   Median :16.0  
 Mean   :6.993   Mean   :15.8  
 3rd Qu.:8.000   3rd Qu.:23.0  
 Max.   :9.000   Max.   :31.0  

对数据集使用str函数,可以得到数据的观测量,各列的类型及内容。例:

str(airquality)
‘data.frame’: 153 obs. of 6 variables:
O z o n e : i n t 41 36 12 18 N A 28 23 19 8 N A Solar.R: int 190 118 149 313 NA NA 299 99 19 194 …
W i n d : n u m 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 Temp : int 67 72 74 62 56 66 65 59 61 69 …
M o n t h : i n t 5 5 5 5 5 5 5 5 5 5 Day : int 1 2 3 4 5 6 7 8 9 10 …


> table(airquality$Month)

 5  6  7  8  9 
31 30 31 31 30 
> table(airquality$Ozone)

  1   4   6   7   8   9  10  11  12  13  14  16  18  19  20  21  22  23  24 
  1   1   1   3   1   3   1   3   2   4   4   4   4   1   4   4   1   6   2 
 27  28  29  30  31  32  34  35  36  37  39  40  41  44  45  46  47  48  49 
  1   3   1   2   1   3   1   2   2   2   2   1   1   3   2   1   1   1   1 
 50  52  59  61  63  64  65  66  71  73  76  77  78  79  80  82  84  85  89 
  1   1   2   1   1   2   1   1   1   2   1   1   2   1   1   1   1   2   1 
 91  96  97 108 110 115 118 122 135 168 
  1   1   2   1   1   1   1   1   1   1 
> table(airquality$Ozone,useNA = "ifany")

   1    4    6    7    8    9   10   11   12   13   14   16   18   19   20 
   1    1    1    3    1    3    1    3    2    4    4    4    4    1    4 
  21   22   23   24   27   28   29   30   31   32   34   35   36   37   39 
   4    1    6    2    1    3    1    2    1    3    1    2    2    2    2 
  40   41   44   45   46   47   48   49   50   52   59   61   63   64   65 
   1    1    3    2    1    1    1    1    1    1    2    1    1    2    1 
  66   71   73   76   77   78   79   80   82   84   85   89   91   96   97 
   1    1    2    1    1    2    1    1    1    1    2    1    1    1    2 
 108  110  115  118  122  135  168 <NA> 
   1    1    1    1    1    1    1   37 

可以看出,table函数默认不统计缺失值的数量,在函数中加入” useNA = “ifany”
“可以对缺失值的数量进行统计。

在table函数中输入多个参数,可以对多个参数对应的内容进行交叉统计 。例:

> table(airquality$Month,airquality$Day)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
5 1 1 1 1 1 1 1 1 1  1  1  1  1  1  1  1  1  1   1   1  1  1  1   1   1  1  1  1
6 1 1 1 1 1 1 1 1 1  1  1  1  1  1  1  1  1  1   1   1  1  1  1   1   1  1  1  1
7 1 1 1 1 1 1 1 1 1  1  1  1  1  1  1  1  1  1   1   1  1  1  1   1   1  1  1  1
8 1 1 1 1 1 1 1 1 1  1  1  1  1  1  1  1  1  1   1   1  1  1  1   1  1  1  1  1
9 1 1 1 1 1 1 1 1 1  1  1  1  1  1  1  1  1  1   1   1  1  1  1   1  1  1  1  1

    29 30 31
5   1   1  1
6   1   1  0
7   1   1  1
8   1   1  1
9   1   1  0

any函数,函数中的参数的内容存在真,则函数返回真。例:

> any(is.na(airquality$Ozone))
[1] TRUE

sum函数,返回函数中参数内容中为真的数量,例:

> sum(is.na(airquality$Ozone))
[1] 37

all函数,函数中参数的内容均为真,则返回真。例:

> all(is.na(airquality$Ozone))
[1] FALSE
> all(airquality$Month<12)
[1] TRUE
> titanic <- as.data.frame(Titanic)
> head(titanic)
  Class    Sex   Age Survived Freq
1   1st   Male Child       No    0
2   2nd   Male Child       No    0
3   3rd   Male Child       No   35
4  Crew   Male Child       No    0
5   1st Female Child       No    0
6   2nd Female Child       No    0
> dim(titanic)
[1] 32  5

可以看出,数据框titanic中有32行,5列。

> summary(titanic)
  Class       Sex        Age     Survived      Freq       
 1st :8   Male  :16   Child:16   No :16   Min.   :  0.00  
 2nd :8   Female:16   Adult:16   Yes:16   1st Qu.:  0.75  
 3rd :8                                   Median : 13.50  
 Crew:8                                   Mean   : 68.78  
                                          3rd Qu.: 77.00  
                                          Max.   :670.00  
> x <- xtabs(Freq ~ Class + Age, data=titanic)
> x
      Age
Class  Child Adult
  1st      6   319
  2nd     24   261
  3rd     79   627
  Crew     0   885

使用xtabs函数可以生成交叉表,该例子返回的是数据框titanic中Class和Age的频率的交叉表。

> ftable(x)
      Age Child Adult
Class                
1st           6   319
2nd          24   261
3rd          79   627
Crew          0   885

可以看出,ftable函数返回的结果与上述使用xtabs函数返回的结果一致,只是表格更为清晰。

object.size函数返回数据集的大小:

> class(x)
[1] "xtabs" "table"
> class(ftable(x))
[1] "ftable"
> object.size(airquality)
5632 bytes

object.size函数返回的数据集大小的单位我们并不熟悉,套用print函数,将原本不熟悉的单位转为我们熟悉的单位”Kb”。例:

> print(object.size(airquality), units="Kb")
5.5 Kb
> class(object.size(airquality))
[1] "object_size"
> class(print(object.size(airquality), units="Kb"))
5.5 Kb
[1] "object_size"

附录

附录1:常用函数的使用

1.数学函数

abs():绝对值
sqrt():平方根
ceiling(x):不小于x的最小整数
floor(x):不大于x的最大整数
round(x, digits=n):将x舍入为指定位的小数
signif(x, digits=n):将X舍入为指定的有效数字位数

2.统计函数

mean(x):平均值
median(x) :中位数
sd(x):标准差
var(x):方差
quantile(x, probs):求分位数,x为待求分位数的数值型向量,probs是一个由[0,1]的概率值组成的数值型向量
range(x):求值域
sum(x):求和
min(x):求最小值
max(x):求最大值
scale(x, center=TRUE,scale=TRUE):以数据对象x按列进行中心化或标准化,center=TRUE表示数据中心化,scale=TRUE表示数据标准化
diff(x, lag=n):滞后差分,lag用以指定滞后几项,默认为1
difftime(time1,time2,units=c(“auto”,”secs”,”mins”,”hours”,”days”,”weeks”)):计算时间间隔,并以星期,天,时,分,秒来表示

3.概率函数

分布名称:缩写
beta分布:beta
二项分布:binom
柯西分布:Cauchy
卡方分布:chisp
指数分布:exp
F分布:f
gamma分布:gamma
几何分布:geom
超几何分布:hyper
对数正态分布:lnorm
logistics分布:logis
多项分布:multinom
负二项分布:nbinom
正态分布:norm
泊松分布:pois
Wilcoxon分布:signrank
t分布:t
均匀分布:unif
weibull分布:weibull
Wilcoxon秩和分布:Wilcox

在R中,函数函数行如:[x][function]。其中x表示指分布的某一方面,function表示分布名称的缩写。

d->密度函数(density)
p->分布函数(distribution function)
q->分位数函数(quantile function)
r->生成随机数函数

4.字符处理函数

nchar: 计算字符数量
substr(x,start,stop):提取或替换一个字符向量中的字串
grep():正则表达式函数,用于查找。
sub():正则表达式函数,用于替换
strsplit(x,split,fixed=FALSE):在splits处分隔字符向量x中的元素
paste( ):连接字符串,sep为分隔符
toupper( ) :小写字母转大写
tolower( ) :大写字母转小写

5.其他实用函数

length(x):获取对象x的长度
sep(fom,to,by):生成一个从from到to间隔为by的序列
rep(x,n:将x重复n遍
cut(x,n):将x分隔为有着N个水平的因子
pretty(x,n):创建分割点,将x分隔成n个区间
cat(x,file,append):连接x对象,并将其输出到屏幕或文件中。
rownames():修改行数据框行变量名
colnames :修改行数据框列变量名
cbind:根据列进行合并,前提是所有数据行数相等。
rbind :根据行进行合并,要求所有数据列数是相同的才能用rbind.
runif(n, min, max ):生成n个大于min,小于max的随机数
rnorm(n, mean, sd ) :生成n个平均数为mean,标准差为sd的随机数

附录2

gl()函数的使用

格式:gl(n, k, length = n*k, labels = 1:n, ordered = FALSE)

其中,参数n表示整数的级别(因子)数;参数k表示一个整数,重复数;length表示一个整数,结果的长度;labels表示可选的向量因子水平的标签;ordered表示一个逻辑表明是否排序
返回值为 因子长度从1到n,k为length组复制的每个值。

猜你喜欢

转载自blog.csdn.net/woooooood/article/details/81278831
今日推荐