R语言检索

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kidpea_lau/article/details/82785170

 先模拟一组数据来使用,如下: 

> X<-data.frame("v1"=sample(0:10),"v2"=sample(10:20),"v3"=sample(20:30))
> X<-X[sample(0:10),]
> X$v2[c(1,3)]=NA
> X
   v1 v2 v3
4   3 NA 30
8   8 10 20
7   6 NA 23
6   1 17 29
3   0 19 21
10  2 12 24
9   9 15 28
2  10 11 22
5   5 13 27
1   7 14 26

 R语言在数据列表中检索的方法十分简单,用逻辑符号边可以写出自己需要的检索:下面几个例子来具体看一下:

 

“或”

> X[("v1">5|"v3"<25),]
   v1 v2 v3
4   3 NA 30
8   8 10 20
7   6 NA 23
6   1 17 29
3   0 19 21
10  2 12 24
9   9 15 28
2  10 11 22
5   5 13 27
1   7 14 26

————————————————————————————————————————————————— 

“和” 

> X[(X$v1>=5 & X$v2<20),]
   v1 v2 v3
8   8 10 20
NA NA NA NA
9   9 15 28
2  10 11 22
5   5 13 27
1   7 14 26

 ————————————————————————————————————————————————

当处理到v2的时候,数据开始改变了。原因是v2自身带有NA值。

> X[(X$v2>12),]
     v1 v2 v3
NA   NA NA NA
NA.1 NA NA NA
6     1 17 29
3     0 19 21
9     9 15 28
5     5 13 27
1     7 14 26

而这个情况,通常可以直接用which内置来索引! 

> X[which(X$v2>12),]
  v1 v2 v3
6  1 17 29
3  0 19 21
9  9 15 28
5  5 13 27
1  7 14 26

—————————————————————————————————————————————————

sort :提取某一列,并排序

> sort
function (x, decreasing = FALSE, ...) 

> sort(X$v2,decreasing = F,na.last = T)
 [1] 10 11 12 13 14 15 17 19 NA NA

—————————————————————————————————————————————————

order: 列表根据某一列来排序 ,用order function:

> order
function (..., na.last = TRUE, decreasing = FALSE, method = c("auto", 
    "shell", "radix")) 

> X[order(X$v2),]
   v1 v2 v3
8   8 10 20
2  10 11 22
10  2 12 24
5   5 13 27
1   7 14 26
9   9 15 28
6   1 17 29
3   0 19 21
4   3 NA 30
7   6 NA 23

再进一步的说,若按若干列来排列,应该怎么处理:

> X[order(X$v2,X$v1),] #先v2 再v1地进行排列
   v1 v2 v3
8   8 10 20
2  10 11 22
10  2 12 24
5   5 13 27
1   7 14 26
9   9 15 28
6   1 17 29
3   0 19 21
4   3 NA 30
7   6 NA 23

—————————————————————————————————————————————————

可以用plyr包内的arrange():

> arrange
function (df, ...) 
{
    stopifnot(is.data.frame(df))
    ord <- eval(substitute(order(...)), df, parent.frame())
    if (length(ord) != nrow(df)) {
        stop("Length of ordering vectors don't match data frame size", 
            call. = FALSE)
    }
    unrowname(df[ord, , drop = FALSE])
}
<environment: namespace:plyr>

> library(plyr)
> arrange(X,v1)
   v1 v2 v3
1   0 19 21
2   1 17 29
3   2 12 24
4   3 NA 30
5   5 13 27
6   6 NA 23
7   7 14 26
8   8 10 20
9   9 15 28
10 10 11 22
> arrange(X,desc(v1))
   v1 v2 v3
1  10 11 22
2   9 15 28
3   8 10 20
4   7 14 26
5   6 NA 23
6   5 13 27
7   3 NA 30
8   2 12 24
9   1 17 29
10  0 19 21

参考文献:

· DataSummarization and Manipulation BY Andrew Jaffe

·R Programming for Data Science

猜你喜欢

转载自blog.csdn.net/kidpea_lau/article/details/82785170