R语言 排序 次条件

Python06

R语言 排序 次条件,第1张

使用R包dplyr的函数arrange更简单,更简洁:

#多条件排序:使用dplyr::arrange

library(dplyr)

data("iris")

head(iris)

#第一列升序,然后是第三列升序

arrange(iris,iris[,1],iris[,3])

#第一列升序,然后是第三列降序

arrange(iris,iris[,1],-iris[,3])

扩展资料

R语言排序函数sort(),rank(),order()

>x<-c(97,93,85,74,32,100,99,67)

>sort(x)

[1]32677485939799100

>order(x)

[1]58432176

>rank(x)

[1]65431872

1、向量是用于存储数值型,字符型或者逻辑型数据的一维数组。执行组合功能的函数为c(),可以用来创建向量。向量可根据位置进行索引,需要用[]。 2、矩阵是一个二维数组,每个元素都拥有相同的模式,可通过函数matrix()创建矩阵。 3、数组是一个可以在两个以上维度存储数据的数据对象。例如,如果创建尺寸(2,3,4)的数组,那么就是创建4个矩形矩阵每个2行3列。数组只能存储数据类型。 4、矩阵和数组一样都只能包含一种数据类型,当有多种模式的数据时,使用数据框就更为方便。数据框可以用函数data.frame () 创建。 5、$  被用来选取一个给定数据框中的某个特定变量。 6、attach()绑定数据集,detach()解除数据集。 7、with:attach,detach最好在单独的数据框内使用,在多个同名对象最好不要使用,函数with(),可以再具有多个同名对象的数据框内使用,但是必须加入花括号{},这样就无须担心名称冲突了,但是它也有局限性,赋值仅在此函数的括号内生效。 8、列表是一些对象的有序集合。 9,、数据导入 read.table(),其中header = T,代表第一行为变量名称,不作为数据,header = F相反。sep代表数据分隔符,txt为"\t",csv为","。 10、table函数,用 table() 函数统计因子各水平的出现次数(称为频数或频率)。 >sex = c("女","女","女","男","男") >table(sex) >sex   男 女   2 3 求众数 >aim = table(sex)[table(sex)==max(table(sex))] >aim   女    3 > max(table(sex)) [1] 3 > table(sex)==max(table(sex))   sex   男    女   FALSE TRUE 11、 无尺度网络: 是指在某一复杂的 系统 中,大部分节点只有少数几个连结,而某些节点却拥有与其他节点的大量连结。这些具有大量连结的节点称为“集散节点”,所拥有的连结可能高达数百、数千甚至数百万。这一特性说明该网络是无尺度的,因此,凡具有这一特性的网络都是无尺度网络。 12、options(stringsAsFactors = F) #在调用as.data.frame的时,将stringsAsFactors设置为FALSE可以避免character类型自动转化为factor类型。 13、class():查看数据结构:vector、matrix、array、dataframe、list。 14、str():作用用英语来表示是:check classification of viriables,一般用于检查数据框当中有哪些数据。 15、mode() :查看数据元素类型。 16、typeof() :查看数据元素类型,基本等同于mode(),比mode()更为详细。 17、example():假设有一个函数foo,example("foo"),函数foo的使用示例。 18、apropos():列出名称中含有foo的所有可用函数。apropos("foo",mode="function")。 19、data():列出当前已加载包中所含的所有可用示例数据集。 20、ls():列出当前工作空间中的对象。 21、rm():移除(删除)一个或多个对象。 22、history(#):显示最近使用过的#个命令(默认值为25)。 23、options():显示或设置当前选项。有一个收藏文件有介绍options的功能。 24、boxplot():生成盒型图。 25、sum():计算和。sum(x,na.rm = TRUE)。 26、median():计算中位数。 27、cbind():以列结合变量。cbind(x,y,z)。 28、rbind():以行结合变量。 29、vector():以向量形式结合数据。vector(length = 10)。 30、rep():以矩阵形式结合数据。rep(c(1,,2,3),each = 10) 31、seq():生成一个有序的数列。seq(1,10)。 32、dim():矩阵或者cbind输出的维数。dim(Mydata)。 33、scan():从ascii文件中读取数据。scan(file = "test.txt")。 34、write.table():把一个变量写入到ascii文件。write.table(Z,file = "test.txt")。 35、order():确定数据的顺序。order(x)。 36、merge():合并两个数据框。merge(x,y,by = "ID")。 37、str():显示一个对象的内部结构。str(Mydata)。 38、factor():定义变量作为因子。factor(x)。 39、tapply():tapply(X = Veg$R,INDEX = Veg$Transect,FUN = mean).tapply函数根据第二个变量(Transect)的不同水平对第一变量(R)进行了求平均值运算。还可以求sd,var,length等操作。R语言初学者指南P75详细介绍了这个函数。 40、下一页介绍了sapply和lapply。 41、summary():计算基本信息。 42、table():计算列联表,统计因子各水平的出现次数(频数或频率)。table(x,y)。 43、plot():y对x的图形。pch形状,col颜色。 44、par():par(mfrow = c(2,2),mar = c(3,3,2,1)) mfrow生成一个具有4个面板的图形窗口。mar选项指定每个图形周围空白的大小,底部、左侧、顶部、右侧。 45、paste():将变量连接成字符串。paste("a","b",sep = "")。 46、log(): log = "x",log = "y",log = "xy",生成对数轴。 47、%in%: a<-c(1,3,13,1443,43,43,4,34,3,4,3) b<-c(1,13,11,1313,434,1) a%in%b # 返回内容#  [1] TRUE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE # 取反操作 !(a%in%b) 48、sort()函数是对向量进行从小到大的排序 rank()函数返回的是对向量中每个数值对应的秩 order()函数返回的值表示位置,依次对应的是向量的最小值、次小值、第三小值……最大值等(位置索引) arrange()函数(需加载dplyr包)针对数据框,返回基于某列排序后的数据框,方便多重依据排序。 49、subset(): df <- data.frame( a = 1:10, b = 2:11, c = 3:12 )df <- subset(df, select = c(a,c)) #选取列a和c df <- subset(df, select = -c(a,c) ) #去除列a和c

R语言中,和排序相关的常用函数有: order() sort() rank() ,一般是对向量进行操作,也可以对数据框的列进行操作。

1. order(..., decreasing = FALSE)

“...” 中可以是一个向量(数值型,字符型,逻辑型, 因子型 均可),也可以是多个向量( 长度必须相同

它返回的是排列后(默认是升序)的元素在该向量中所处的位置,即 索引 ,所以返回的不是原来向量的那些数值,而是排序后那些数值所对应的位置。它在常在数据框中运用,可以根据某一列和某几列来调整数据框。

1.1 单个向量

1.2 多个向量(数据框的多列)

上面最左边的一列数值(不是var1这一列)就是 order(df$var1) 生成的,列var1的顺序就是order后的,注意和前面df 的列var1进行比较,还有一点要牢记的就是这种在数据框里的调整,是 整行变动(都按列var1来) 。故而本质上,对于数据框而言, order函数出来的是原始数据框中的行号,行号顺序一变,意味着行号代表的整行跟着变

接着再按列var2排序(注意是在列var1已经排好的基础上再按列var2重新排序,即此时列var1里的 非重复值的行顺序不会再变了,只有列var1里有重复值(数值相同的)的行才会变换 ,而且是按照列var2来变换,。如还要按其它列再排,以此类推):

最后再按列var3排序,此时只有列var2中 有重复值的行 (当然这时var1肯定也是重复的)才会变换------这里是含有9的那两行,并且是按照这些重复值对应到列var3的那些行的数值(数值1和2)来变的

总结提升,order()函数中,如果第一个向量(或者说是数据框里你想要根据它来调整的那一列)里没有重复值,那么按照后面的所有向量(不管有多少个)的重排都不会进行(或者说重排的结果不会变),order(vec1,vec2,vec3,...) 返回的行号及其顺序和 order(vec1) 的是一样。

同理,也可以处理对应的行(比如矩阵或是数据框的行)

1.3 factor(因子型向量)

2. sort(x, decreasing = FALSE)

x 只能是 一个 向量(数值型,字符型,逻辑型, 因子型 均可)

返回的是排序后(默认是升序)的那个数值向量( 还是那些数值,只不过是排序过了的

3. rank(x, na.last = TRUE)

求秩的函数,x 只能是 一个**向量(数值型,字符型,逻辑型), 该向量一般不会有重复值 ,返回的是该向量中对应元素的“排名”,即元素顺序它不会改变,只是告诉你每个元素在整个向量中的名次(如果要排序(默认是升序)的话)。

如果向量有重复值,出现的结果会有些不太好处理

匹配两个向量,返回的是第一个向量 x中的各个元素在第二个向量 y中所匹配的元素的位置值(索引,下标值),即 返回的是第二个向量的下标值组成的向量

注意事项:

1. 返回的下标值向量的长度与第一个向量相等,即 length(x) == length(match(x,y)) 为 TRUE。

2. 第一个向量可以是只有一个元素的向量。

3. 两个向量的长度不一定要相等。

4. 返回的是 x中每个元素在y中的位置,可用来提取y中的元素,没有匹配上的会返回 NA。

拓展用法:

y [match(x, y)] : x中 和y 相同的元素都是哪些,前提是x中的元素在y中都有(即x是y的子集),否则会返回 NA。( 最好是用x[ x %in y]

y[-match(x, y)] : 找出 y里面有 x里面没有的数值,前提是x中的元素在y中都有(即x是y的子集),否则会报错。

当两个向量类型不一样时, match函数会进行类型转换,然后再匹配。

x %in% y

判断x中的元素是否都在y中,返回的是个长度和 x 一样的逻辑值向量,存在的话返回TRUE,否则返回FALSE。

sum(x %in% y) : 统计 x 中有多少个元素在y中,或者说 x 和 y 有几个相同元素

x[x %in% y] :x中 和y 相同的元素都是哪些