马拉松Day3的课程提了一个课后小作业,按照某列取值大小对数据框排序
这个是很常用的数据处理过程,在excel里只需要选择某列然后选择扩展区域就行,但是R中好像没有这个函数
之前每次都是用到现搜,但是别人的思路总是记不住的,今天试着自己用这两天课程学到的写一个运算逻辑
代码语言:R复制#以iris数据为例,按照Sepal.Length数据从小到大排序
head(iris)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1 5.1 3.5 1.4 0.2 setosa
#2 4.9 3.0 1.4 0.2 setosa
#3 4.7 3.2 1.3 0.2 setosa
#4 4.6 3.1 1.5 0.2 setosa
#5 5.0 3.6 1.4 0.2 setosa
#6 5.4 3.9 1.7 0.4 setosa
x=iris$Sepal.Length
names(x)=1:length(x)
#这是Day3中讲到的小技巧,对向量中的每个元素命名,这里用来给数据增加标识符
x=sort(x) #默认decreasing=F,如果需要从大到小排序只需要修改这个参数即可
df1=iris[names(x),]
只需要4行代码,完成!
20240112更新,马拉松Day4学习了function的部分功能,试着把他封装为函数试了一下
代码语言:R复制sortbycol=function(data,name){
x=data[,name]
names(x)=1:length(x)
x=sort(x)
df=data[names(x),]
return(df)
}
df1=sortbycol(iris,'Sepal.Length') #注意列名要加引号
df3=sortbycol(iris,3) #或者写第几列都可以
可以搞定,有点开心~
20240116更新,可恶啊,原来有现成的函数arrange(),果然归来仍是零基础,这个函数原来是实现这个功能的吗?完全没有映像了
代码语言:R复制library(dplyr)
arrange(test, Sepal.Length) #从小到大
arrange(test, desc(Sepal.Length)) #从大到小