时间: 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))
> xv1 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:
Ozone:int41361218NA2823198NA…Ozone:int41361218NA2823198NA… Ozone : int 41 36 12 18 NA 28 23 19 8 NA … Solar.R: int 190 118 149 313 NA NA 299 99 19 194 …
Wind:num7.4812.611.514.314.98.613.820.18.6…Wind:num7.4812.611.514.314.98.613.820.18.6… Wind : num 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 …
Month:int5555555555…Month:int5555555555… Month : int 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  129 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)
> xAge
Class  Child Adult1st      6   3192nd     24   2613rd     79   627Crew     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组复制的每个值。

R语言基础学习记录4:重要函数相关推荐

  1. R语言数据处理学习记录--使用linkET包完成mental test

    R语言数据处理学习记录–使用linkET包完成mental test 注:本文仅作为自己的学习记录以备复习查阅 一 简单介绍一下 这个包依旧是来自于GitHub上,作者给出的介绍:linkET的目标是 ...

  2. R语言基础包中的绘图函数——快速用R探索数据

    library(ggplot2)#R语言中的基础包所带的绘图函数虽然用起来相对ggplot2包不是那么友好 #但在刚拿到原始数据时进行快速探索还是很方便的####散点图 #运用plot()函数,向函数 ...

  3. R语言基础学习:矩阵及矩阵的基础操作

    R语言的矩阵在数据操作的工作中十分的方便,也十分实用,给批量操作提供了简便的工具: 以下是整理的上课笔记: #@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ...

  4. 数据分析之R语言基础学习一

    数据分析--R语言1 一.基础 二. 简单的数据处理 2.1 下载数据包 install.packages("nycflights13") #安装数据包,美国运输统计局13年从纽约 ...

  5. R语言小白学习笔记12—概率分布

    R语言小白学习笔记12-概率分布 笔记链接 学习笔记12-概率分布 12.1 正态分布 12.2 二项分布 12.3 泊松分布 12.4 其他分布 笔记链接 学习笔记1-R语言基础. 学习笔记2-高级 ...

  6. R语言小白学习笔记13—基本统计

    R语言小白学习笔记13-基本统计 笔记链接 学习笔记13-基本统计 13.1 概括性统计量 13.2 相关系数和协方差 13.3 t-检验 13.3.1 单样本t检验 13.3.2 两样本t检验 13 ...

  7. R语言小白学习笔记3—R语言读取数据

    R语言小白学习笔记3-R语言读取数据 笔记链接 想说的话 学习笔记3-R语言读取数据 3.1 读取CSV文件 3.1.1 read_delim函数 3.1.2 fread函数 3.2 读取Excel数 ...

  8. R语言基础知识入门学习(一)

    目录 系列文章目录 一.软件下载 二.基本知识 1. 对象 2. 向量 3. 向量化 4. 因子 总结 系列文章目录 R语言基础知识入门学习(一) 一.软件下载 我们可以通过这个网址对R语言软件进行下 ...

  9. R语言基础入门(学习笔记通俗易懂版)

    文章目录 R语言预备知识 获取工作目录 设置工作目录 注释 变量名的命名 赋值 变量的显示 查看与清除变量 函数帮助文档查询 函数 安装R包 文件的读取 文件的输出 软件的退出与保存 R语言语法 向量 ...

最新文章

  1. spring data jpa 分页查询
  2. Python 捕获异常
  3. 容器编排技术 -- Kubernetes 中查看Pods和Nodes
  4. MongoDB学习day10--数据库导入导出
  5. python 密码安全_python密码安全程序
  6. eclipse引入php源包
  7. Linux与windows常用软件大比拼
  8. rba有哪几個主要組成部分_RBA管理体系有哪些
  9. 数据库设计——概念模型
  10. postman测试Excel文件导入导出功能
  11. ora-04098:触发器 无效且未通过重新验证问题解决之权限
  12. 班农注定落得如此下场
  13. 2017中国软件技术大会圆满闭幕
  14. AirDisk产品BT下载
  15. java导出word实现方式一,在jsp中实现
  16. 绿联扩展坞拆解_拆解报告:UGREEN 绿联 3A1C 四口多功能扩展坞(带 SD 卡槽版)...
  17. 条码标签设计软件Nicelabel使用方法
  18. 三调 图斑地类面积_图斑地类面积理论值计算方法说明
  19. 挖掘安卓宝藏,EMUI会让手机进入“量心定制”时代吗?
  20. Android开发推荐资料大合集 【转载自51CTO】

热门文章

  1. 在这个“未来工厂”里, 人类仅凭脑电波控制机器
  2. Unity3D制作3维立体小游戏
  3. 单片机实验(六)控制共阴极数码管1-9显示
  4. SimpleWord 简词开发记录笔记
  5. HCIP-H12-221练习题
  6. Maven读这一篇就够了
  7. pythonbmi代码_用python写一个BMI体制指数测试
  8. Python实现抠图换背景
  9. STM32和51最小系统原理图以及PCB板图以及元件库
  10. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java焦虑自测与交流平台k43cf