4-6排序
排序
sort:对向量进行排序;返回排好序的内容
order:返回排好序的内容的下标/多个排序标准
x<-data.frame(v1=1:5,v2=c(10,7,9,6,8),v3=11:15,v4=c(1,1,2,2,1))
sort(x$v2)(对v2这一列按照升序进行排序)
sort(x$v2,decreasing=TRUE)(对v2这一列按照降序进行排序)
order(x$v2)(返回的不是内容本身 返回了行号)
x[order(x$v2),](对整个数据框按照v2这一列进行排序)
x[order(x$v4,x$v2),](对整个数据框按照v4这一列进行排序,如果v4中有重复的元素,则按照v2排序)
x[order(x$v4,x$v2),decreasing=TRUE](降序)
排序
sort(x$v2) #将v2这列元素升序排
sort(x$v2,decreasing = TRUE) #将v2这列元素降序排
order()# 返回排序数据对应的标号,并且可以设置多个参数排序
若要按照多种要求排序,优先按照第一要求
sort(x$v2,decreasing=TRUE)对v2进行降序排序,返回v2的元素本身
order返回的是重新排序后元素对应的下标
x【order(x$v2),】按照v2排序的顺序对x所有元素进行排序
排序
sort
order
关于排序的两个函数:1)sort:对向量进行排序,返回排好序的内容;2)order:返回排好序的内容的下标/可有多个排序标准
sort默认升序排列,若要降序,添加decreasing=TRUE
> str(lapply)
function (X, FUN, ...)
> x <- list(a = 1:10,b = c(11,23,45,67,32,12))
> lapply(x,mean)
$`a`
[1] 5.5
$b
[1] 31.66667
> x1 <- 1:4
> lapply(x1,runif)
[[1]]
[1] 0.8868638
[[2]]
[1] 0.11008790 0.02666372
[[3]]
[1] 0.7966674 0.7209711 0.1867769
[[4]]
[1] 0.3799041 0.5063865 0.3081169 0.8336526
> lapply(x1,runif,min=0,max=100)
[[1]]
[1] 4.456663
[[2]]
[1] 34.33404 43.46529
[[3]]
[1] 66.93998 58.74472 79.33469
[[4]]
[1] 44.57984 79.15024 48.03468 88.60884
> x2 <-list(a = matrix(1:6,3,2), b =matrix(4:9,2,3))
> lapply(x2,function(m) m[1,])
$`a`
[1] 1 4
$b
[1] 4 6 8
> x <- list(a = 1:10,b = c(11,23,45,67,32,12))
> lapply(x,mean)
$`a`
[1] 5.5
$b
[1] 31.66667
> sapply(x,mean)
a b
5.50000 31.66667
> class(sapply(x,mean))
[1] "numeric"
> x <-array(rnorm(2*3*4),c(2,3,4))
> x
, , 1
[,1] [,2] [,3]
[1,] -2.4737530949 0.4171645 -1.0461752
[2,] -0.0001240402 -0.7896605 0.2961749
, , 2
[,1] [,2] [,3]
[1,] -0.3129235 2.9848179 -0.09541397
[2,] -0.2952547 0.3107933 1.35694007
, , 3
[,1] [,2] [,3]
[1,] -0.04722984 0.1340425 -0.5091902
[2,] -0.59321372 -0.1358251 0.2591943
, , 4
[,1] [,2] [,3]
[1,] 1.8403115 -1.5341308 -0.6485949
[2,] -0.0483033 -0.2849255 0.7454548
> y <-array(rnorm(2*3*4),c(2,3,4))
> y
, , 1
[,1] [,2] [,3]
[1,] -0.3573472 -1.3076321 1.4378976
[2,] 0.7947117 0.1829961 0.7720183
, , 2
[,1] [,2] [,3]
[1,] -0.06392413 -0.8112794 -0.5554383
[2,] 0.75611728 -0.1259885 0.9862515
, , 3
[,1] [,2] [,3]
[1,] 1.1408303 1.5646228 -1.2259067
[2,] -0.4162167 0.2803539 0.9684884
, , 4
[,1] [,2] [,3]
[1,] -0.8962086 -1.4802795 0.3094928
[2,] -0.5749213 -0.4892932 -0.5233857
> apply(y, c(1,2),mean)
[,1] [,2] [,3]
[1,] -0.04416243 -0.50864205 -0.008488657
[2,] 0.13992275 -0.03798291 0.550843091
> apply(y, c(1,3),mean)
[,1] [,2] [,3] [,4]
[1,] -0.07569391 -0.4768806 0.4931821 -0.6889984
[2,] 0.58324204 0.5387934 0.2775419 -0.5292001
> apply(y, c(2,3),mean)
[,1] [,2] [,3] [,4]
[1,] 0.2186823 0.3460966 0.3623068 -0.7355650
[2,] -0.5623180 -0.4686339 0.9224883 -0.9847863
[3,] 1.1049579 0.2154066 -0.1287092 -0.1069465
> 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
> s <- function(n,mean,std){
+ rnorm(n,mean,std)
+ }
> s(4,0,1)#抽取4个均值为0标准差为1的数
[1] -0.2924530 -1.3309042 0.8299158 -1.4291025
> mapply(s,1:5,5:1,2)
[[1]]
[1] 3.907964
[[2]]
[1] 3.6132156 0.4039049
[[3]]
[1] 4.6735051 0.2037741 1.3328692
[[4]]
[1] 3.75000085 -0.06562299 0.57787271 1.62600421
[[5]]
[1] 0.5588209 -0.4725886 3.6368032 1.0203294 -3.1208185
> x <-c(rnorm(5),runif(5),rnorm(5,1))#创建包含15个元素的向量,前五个是正态分布的5个,中间是均匀分布的5个元素,最后是标准差为1,标准差为0的正态分布
>
> x
[1] -0.37771653 -0.08087372 -0.35404229 -0.75805485 1.09533919 0.54208869
[7] 0.54051547 0.38912002 0.12224007 0.28072261 1.25432798 0.83136329
[13] 0.72196141 1.34407258 2.80813618
> f <- gl(3,5)#gl函数后的参数说明:选取3个水平,每个水平下有5个元素
> f
[1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
Levels: 1 2 3
> split(x,f)
$`1`
[1] -0.37771653 -0.08087372 -0.35404229 -0.75805485 1.09533919
$`2`
[1] 0.5420887 0.5405155 0.3891200 0.1222401 0.2807226
$`3`
[1] 1.2543280 0.8313633 0.7219614 1.3440726 2.8081362
> lapply(split(x,f),mean)
$`1`
[1] -0.09506964
$`2`
[1] 0.3749374
$`3`
[1] 1.391972
> s <- split(airquality,airquality$Month)
> lapply(s,function(x),colMeans(x,[,c("Ozone","Wind","Temp")]))
Error: unexpected ',' in "lapply(s,function(x),"
> 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
> s <- split(airquality,airquality$Month)#查找airquality包中的月份数据,并传入s中
> table(airquality$Month)#查找month的信息,以及每一月包含的记录数
5 6 7 8 9
31 30 31 31 30
> lapply(s,function(x),colMeans(x,[,c("Ozone","Wind","Temp")]))
Error: unexpected ',' in "lapply(s,function(x),"
> lapply(s, function(x) colMeans(x,[,c("Ozone","Wind","Temp")]))
Error: unexpected '[' in "lapply(s, function(x) colMeans(x,["
> 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
> slapply(s, function(x) colMeans(x[,c("Ozone","Wind","Temp")]))
Error in slapply(s, function(x) colMeans(x[, c("Ozone", "Wind", "Temp")])) :
could not find function "slapply"
> 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
> x1 <- data.frame(v1=1:5, v2 =c(10,5,2,8,63), v3=11:15, v4 =c(1,1,2,4,5))
> x1
v1 v2 v3 v4
1 1 10 11 1
2 2 5 12 1
3 3 2 13 2
4 4 8 14 4
5 5 63 15 5
> sort(x1$v2)
[1] 2 5 8 10 63
> sort(x1$v2, decreasing = TRUE)
[1] 63 10 8 5 2
> order(x1$v2)#返回的是第二列排序后的下标序号
[1] 3 2 4 1 5
> x[order(x1$v2)]
[1] -0.35404229 -0.08087372 -0.75805485 -0.37771653 1.09533919
> x[order(x1$v2),]
Error in x[order(x1$v2), ] : incorrect number of dimensions
> order(x1$v2)
[1] 3 2 4 1 5
> x[order(x1$v2),]
Error in x[order(x1$v2), ] : incorrect number of dimensions
> x1[order(x1$v2),]
v1 v2 v3 v4
3 3 2 13 2
2 2 5 12 1
4 4 8 14 4
1 1 10 11 1
5 5 63 15 5
>
sort:对向量进行排序;返回排好序的内容;
order:返回排好序的内容的下标/可以按照多个排序标准排序;
x[order(x$v2), ];
想要降序排列只需要在上述函数中传入参数 decreasing = TRUE;
用order按多种标准排序:
x[order(x$v4,x$v2), ];
sort升序
order排序
sort:对向量进行排序,返回排好的内容
order:返回排好序的内容的下标/多个排序标准
sort(x$列名字)//按升序排列
sort(x$列名字,decreasing=TRUE)//按降序排列
x[order(x$列名字1,x$列名字2),]//先排列1,再排列2
#排序
x<-data.frame(v1=1:5,v2=c(10,7,9,6,8),v3=11:15,v4=c(1,1,2,2,1)) x sort(x$v2,decreasing = TRUE)#对数据框v2进行降序排列 sort(x$v3)#对数据框v3进行升序排列 order(x$v2)#返回的不是内容本身,而是内容对应的下标排序 x[order(x$v2),]#行顺序按照order方式排列 x[order(x$v4,x$v3),]#先排序v4,再排序v3,v4的排序结果更强 x[order(x$v4,x$v3,decreasing = TRUE),]#先排序v4,再排序v3,v4的排序结果更强
sort: 对向量进行排序,返回排好序的内容
order: 返回排好序的内容的下标,多个排序标准(返回值是对应“排名”的元素所在向量中的位置)
sort(x)
sort(x, decreasing=TRUE) 降序排列
#对数据进行排序
#sort返回排好序的内容
#order返回下标
x <- data.frame(v1=1:5, v2=c(10,7,9,6,8), v3=11:15, v4=c(1,1,2,2,1)) sort(x$v2)
sort(x$v2,decreasing = TRUE)
order(x$v2) #返回的不是内容本身,是内容的下标
x[order(x$v2),] #对x针对v2进行排序
x[order(x$v4, x$v2, decreasing = TRUE), ]
2018-06-01