R语言:排序的应用操作

工作中遇到过许多看起来挺复杂的数据筛选,本质上都可以用排序解决,这里以R自带的mtcar数据集为例做一个记录。

首先简单介绍一下mtcar数据集,mtcar(Motor Trend Car Road Tests)是一个32行11列的数据集,记录了32种汽车的11种性能,具体数据如下:

> mtcars
                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2

假如我们想挑一款比较省油的车,也就是选一款mpg(每加仑公里数)较高的车。如果只要一个备选,自然可以使用which.max函数:

> mtcars[which.max(mtcars$mpg), ]
                mpg cyl disp hp drat    wt qsec vs am gear carb
Toyota Corolla 33.9   4 71.1 65 4.22 1.835 19.9  1  1    4    1
      

如果想要多个备选呢?例如2个备选。我们可以将mtcars按mpg从大到小排序,然后列出前两个:

> db_use <- mtcars[order(mtcars$mpg, decreasing = T), ]
> db_use
                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
        

前两名是:

> db_use[1:2, ]
                mpg cyl disp hp drat    wt  qsec vs am gear carb
Toyota Corolla 33.9   4 71.1 65 4.22 1.835 19.90  1  1    4    1
Fiat 128       32.4   4 78.7 66 4.08 2.200 19.47  1  1    4    1

如果取前3名呢?我们注意到存在并列第3的情况,所以说直接取前3行就不合适了。这样我们可以新设一列表示mpg的排名(rank),然后取排名小于等于3的数据。但是rank函数是从小到大排序的,我们这里要从大到小排序,需要做一个简单的变换:

> db_use$rank <- nrow(db_use) - rank(db_use$mpg, ties.method = 'max') + 1
> db_use
                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb rank
Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1    1
Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1    2
Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2    3
Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2    3
Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1    5
Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2    6
        

选取前3名:

> db_use[which(db_use$rank<= 3), ]
                mpg cyl disp  hp drat    wt  qsec vs am gear carb rank
Toyota Corolla 33.9   4 71.1  65 4.22 1.835 19.90  1  1    4    1    1
Fiat 128       32.4   4 78.7  66 4.08 2.200 19.47  1  1    4    1    2
Honda Civic    30.4   4 75.7  52 4.93 1.615 18.52  1  1    4    2    3
Lotus Europa   30.4   4 95.1 113 3.77 1.513 16.90  1  1    5    2    3
        

下面增加一下难度。现在我们挑选出来的车都是4缸的,即cyl(气缸数)为4。我们想在不同气缸数的车中都挑一些省油的车做备选,比方说在不同气缸数的车中挑出各自前3款最省油的车。

同样,我们需要构造一个新变量表示mpg的排名,只不过这个排名是一个分组排名,即以气缸数分组,在气缸数相同的车中分别排名。

首先,我们将数据按气缸数分组排好:

> library(dplyr)
> db_use <- mtcars
> db_use$name <- rownames(db_use)
> db_use <- arrange(db_use, cyl, desc(mpg))
> db_use
    mpg cyl  disp  hp drat    wt  qsec vs am gear carb                name
1  33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1      Toyota Corolla
2  32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1            Fiat 128
3  30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2         Honda Civic
4  30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2        Lotus Europa
5  27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1           Fiat X1-9
6  26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2       Porsche 914-2
        

然后列出各组的组内rank:

> rank_group <- aggregate(mpg~cyl, db_use, rank, ties.method = 'max')
> db_use$rank_increase <- unlist(rank_group$mpg)
> db_use
    mpg cyl  disp  hp drat    wt  qsec vs am gear carb                name rank_increase
1  33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1      Toyota Corolla            11
2  32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1            Fiat 128            10
3  30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2         Honda Civic             9
4  30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2        Lotus Europa             9
5  27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1           Fiat X1-9             7
6  26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2       Porsche 914-2             6
     

接着,算出每组各包含多少数据:

> num_all <- aggregate(mpg~cyl, db_use, length)
> db_use$num_all <- rep(num_all$mpg, num_all$mpg)
> db_use
    mpg cyl  disp  hp drat    wt  qsec vs am gear carb                name rank_increase num_all
1  33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1      Toyota Corolla            11      11
2  32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1            Fiat 128            10      11
3  30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2         Honda Civic             9      11
4  30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2        Lotus Europa             9      11
5  27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1           Fiat X1-9             7      11
6  26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2       Porsche 914-2             6      11
        

最后二者相减得出各组的组内从大到小排名,选取排名小于等于3的汽车::

> db_use$rank_decrease <- db_use$num_all - db_use$rank_increase + 1
> db_use[which(db_use$rank_decrease <= 3), ]
    mpg cyl  disp  hp drat    wt  qsec vs am gear carb              name rank_increase num_all rank_decrease
1  33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1    Toyota Corolla            11      11             1
2  32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1          Fiat 128            10      11             2
3  30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2       Honda Civic             9      11             3
4  30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2      Lotus Europa             9      11             3
12 21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1    Hornet 4 Drive             7       7             1
13 21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4         Mazda RX4             6       7             2
14 21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4     Mazda RX4 Wag             6       7             2
19 19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2  Pontiac Firebird            14      14             1
20 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2 Hornet Sportabout            13      14             2
21 17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3        Merc 450SL            12      14             3
        

有时候我们不会挑选具体前3名还是前5名的数据,会是取一个百分比,比方说在各组内挑选前20%最省油的车辆,这个需求利用前边的几个中间变量新设一个百分比变量就能轻松实现:

> db_use[which(db_use$Percent <= 0.2), ]
    mpg cyl  disp  hp drat    wt  qsec vs am gear carb              name rank_increase num_all rank_decrease    Percent
1  33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1    Toyota Corolla            11      11             1 0.09090909
2  32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1          Fiat 128            10      11             2 0.18181818
12 21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1    Hornet 4 Drive             7       7             1 0.14285714
19 19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2  Pontiac Firebird            14      14             1 0.07142857
20 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2 Hornet Sportabout            13      14             2 0.14285714
 

补充:R语言中的排序算法

最近用R语言比较多,所以这次再一次整理一下R语言中的排序算法,本篇文章主要以代码实现为主,原理不在此赘述了。

文中如有不正确的地方,欢迎大家批评指正。

1.测试数据

<span style="font-size:18px;"># 测试数组
vector = c(5,34,65,36,67,3,6,43,69,59,25,785,10,11,14)
vector
##  [1]   5  34  65  36  67   3   6  43  69  59  25 785  10  11  14</span>

2.R语言中自带的排序函数

在R中,跟排序有关的函数主要有三个:sort(),rank(),order()。其中sort(x)是对向量x进行排序,rank()是求秩的函数,它的返回值是这个向量中对应元素的“排名”,order()的返回值是对应“排名”的元素所在向量中的位置。

sort(vector)
##  [1]   3   5   6  10  11  14  25  34  36  43  59  65  67  69 785
order(vector)
##  [1]  6  1  7 13 14 15 11  2  4  8 10  3  5  9 12
rank(vector)
##  [1]  2  8 12  9 13  1  3 10 14 11  7 15  4  5  6

3.冒泡排序

# bubble sort
bubbleSort = function(vector) {
  n = length(vector)
  for (i in 1:(n-1)) {
    for (j in (i+1):n) {
      if(vector[i]>=vector[j]){
        temp = vector[i]
        vector[i] = vector[j]
        vector[j] = temp
        }
      }
    }
  return(vector)
}
bubbleSort(vector)
##  [1]   3   5   6  10  11  14  25  34  36  43  59  65  67  69 785

4.快速排序

# quick sort
quickSort = function(vector, small, big) {
  left = small
  right = big
  if (left >= right) {
    return(vector)
  }else{
    markValue = vector[left]
    while (left < right) {
      while (left < right && vector[right] >= markValue) {
        right = right - 1
      }
      vector[left] = vector[right]
      while (left < right && vector[left] <= markValue) {
        left = left + 1
      }
      vector[right] = vector[left]
    }
  vector[left] = markValue
  vector = quickSort(vector, small, left - 1)
  vector = quickSort(vector, right + 1, big)
  return(vector)
  }
}
quickSort(vector,1,15)
##  [1]   3   5   6  10  11  14  25  34  36  43  59  65  67  69 785

5.插入排序

# insert sort
insertSort = function(vector){
  n = length(vector)
  for(i in 2:n){
    markValue = vector[i]
    j=i-1
    while(j>0){
      if(vector[j]>markValue){
        vector[j+1] = vector[j]
        vector[j] = markValue
      }
      j=j-1
    }
  }
  return(vector)
}
insertSort(vector)
##  [1]   3   5   6  10  11  14  25  34  36  43  59  65  67  69 785

6.希尔排序

# shell sort
shellSort = function(vector){
   n = length(vector)
   separate = floor(n/2)
   while(separate>0){
     for(i in 1:separate){
       j = i+separate
       while(j<=n){
         m= j- separate
         markVlaue = vector[j]
         while(m>0){
           if(vector[m]>markVlaue){
             vector[m+separate] = vector[m]
             vector[m] = markVlaue
           }
           m = m-separate
         }
         j = j+separate
       }
     }
     separate = floor(separate/2)
   }
   return(vector)
}
shellSort(vector)
##  [1]   3   5   6  10  11  14  25  34  36  43  59  65  67  69 785

7.选择排序

# select sort
selectSort = function(vector){
  n = length(vector)
  for(i in 1:(n-1)){
    minIndex = i
    for(j in (i+1):n){
      if(vector[minIndex]>vector[j]){
        minIndex = j
      }
    }
    temp = vector[i]
    vector[i] = vector[minIndex]
    vector[minIndex] = temp
  }
  return(vector)
}
selectSort(vector)
##  [1]   3   5   6  10  11  14  25  34  36  43  59  65  67  69 785

8.堆排序

# heap sort
adjustHeap = function(vector,k,n){
  left = 2*k
  right = 2*k+1
  max = k
  if(k<=n/2){
    if(left<=n&&vector[left]>=vector[max]){
      max = left
    }
    if(right<=n&&vector[right]>=vector[max]){
      max = right
    }
    if(max!=k){
      temp = vector[k]
      vector[k] = vector[max]
      vector[max] = temp
      vector = adjustHeap(vector,max,n)
    }
  }
  return(vector)
}
createHeap = function(vector,n){
  for(i in (n/2):1){
    vector = adjustHeap(vector,i,n)
  }
  return(vector)
}
heapSort = function(vector){
  n = length(vector)
  vector = createHeap(vector,n)
  for(i in 1:n){
    temp = vector[n-i+1]
    vector[n-i+1] = vector[1]
    vector[1] = temp
    vector = adjustHeap(vector,1,n-i)
  }
  return(vector)
}

9.归并排序

# merge sort
combine = function(leftSet,rightSet){
  m = 1
  n = 1
  vectorTemp = c()
  while (m<=length(leftSet)&&n<=length(rightSet)) {
    if(leftSet[m]<=rightSet[n]){
      vectorTemp = append(vectorTemp,leftSet[m])
      m = m+1
    }else{
      vectorTemp = append(vectorTemp,rightSet[n])
      n = n+1
    }
  }
  if(m>length(leftSet)&&n==length(rightSet)){
    vectorTemp = append(vectorTemp,rightSet[n:length(rightSet)])
  }else if(m==length(leftSet)&&n>length(rightSet)){
    vectorTemp = append(vectorTemp,leftSet[m:length(leftSet)])
  }
  return(vectorTemp)
}
mergeSort = function(vector){
  size = length(vector)
  if(size==1){
    return(vector)
  }
    cut = ceiling(size/2)
    leftSet = mergeSort(vector[1:cut])
    rightSet = mergeSort(vector[(cut+1):size])
    vector = combine(leftSet,rightSet)
    return(vector)
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • R语言-summary()函数的用法解读

    summary():获取描述性统计量,可以提供最小值.最大值.四分位数和数值型变量的均值,以及因子向量和逻辑型向量的频数统计等. 结果解读如下: 1. 调用:Call lm(formula = DstValue ~ Month + RecentVal1 + RecentVal4 + RecentVal6 + RecentVal8 + RecentVal12, data = trainData) 当创建模型时,以上代码表明lm是如何被调用的. 2. 残差统计量:Residuals Min 1Q M

  • R语言中cut()函数的用法说明

    R语言cut()函数使用 cut()切割将x的范围划分为时间间隔,并根据其所处的时间间隔对x中的值进行编码. 参数:breaks:两个或更多个唯一切割点或单个数字(大于或等于2)的数字向量,给出x被切割的间隔的个数. breaks采用fivenum():返回五个数据:最小值.下四分位数.中位数.上四分位数.最大值. labels为区间数,打标签 ordered_result 逻辑结果应该是一个有序的因素吗? 先用fivenum求出5个数,再用labels为每两个数之间,贴标签,采用(]的区间,

  • R语言通过parallel包实现多线程运行方式

    总的来说,R的运算速度不算快,不过类似并行运算之类的改进可以提高运算的性能.下面非常简要地介绍如何利用R语言进行并行运算 library(parallel) cl.cores <- detectCores() cl <- makeCluster(cl.cores) detectCores( )检查当前电脑可用核数. makeCluster(cl.cores)使用刚才检测的核并行运算.R-Doc里这样描述makeCluster函数:Creates a set of copies of R run

  • 在R语言中实现Logistic逻辑回归的操作

    逻辑回归是拟合回归曲线的方法,当y是分类变量时,y = f(x).典型的使用这种模式被预测Ÿ给定一组预测的X.预测因子可以是连续的,分类的或两者的混合. R中的逻辑回归实现 R可以很容易地拟合逻辑回归模型.要调用的函数是glm(),拟合过程与线性回归中使用的过程没有太大差别.在这篇文章中,我将拟合一个二元逻辑回归模型并解释每一步. 数据集 我们将研究泰坦尼克号数据集.这个数据集有不同版本可以在线免费获得,但我建议使用Kaggle提供的数据集. 目标是预测生存(如果乘客幸存,则为1,否则为0)基于

  • R语言-有负下标里才能有零介绍

    1.只有负下标里才能有零 先看一个例子 >a<-c(1,2,3,4) >a[-1:1] > a[-1:1] Error in a[-1:1] : 只有负下标里才能有零 (1)只有负下标里才能有零,在这里的意思为: a[-1:0] 可行 a[0:4]也可行 a[-1:1]不可行 也就是说要么是负索引到0,或者0到正索引,但不能同时出现正负索引. (2)a[0]结果为numberic(0),结果没有意义,如 > a[0]+10.9 numeric(0) > a[1]+10.

  • R语言多线程运算操作(解决R循环慢的问题)

    已经大半年没有更新博客了..最近都跑去写分析报告半年没有R 这次记录下关于R循环(百万级以上)死慢死慢的问题,这个问题去年就碰到过,当时也尝试过多线程,but failed......昨天试了下,终于跑通了,而且过程还挺顺利 step1 先查下自己电脑几核的,n核貌似应该选跑n个线程,线程不是越多越好,线程个数和任务运行时间是条开口向下的抛物线,最高点预计在电脑的核数上. detectCores( )检查当前电脑可用核数 我的是4所以step2选的是4 library(parallel) cl.

  • R语言向量下标操作

    向量下标即元素在向量中的位置,在实践中我们可以利用下标(元素的位置)来找出自己想要的数. 利用runif函数生成包含10个正整数的向量x. options(digits = 1) set.seed(1234) x <- runif(10,min = 1,max = 20) x [1] 3 13 13 13 17 13 1 5 14 11 正整数下标 我们可以输入正整数作为下标来找出对应位置的元素. 在[]内输入下标. #向量x的第一位置的元素 x[1] [1] 3 #向量x的第2位置的元素 x[

  • R语言:排序的应用操作

    工作中遇到过许多看起来挺复杂的数据筛选,本质上都可以用排序解决,这里以R自带的mtcar数据集为例做一个记录. 首先简单介绍一下mtcar数据集,mtcar(Motor Trend Car Road Tests)是一个32行11列的数据集,记录了32种汽车的11种性能,具体数据如下: > mtcars mpg cyl disp hp drat wt qsec vs am gear carb Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 M

  • R语言实现二进制文件读写操作

    二进制文件是一个文件,其中包含仅以位和字节形式存储的信息(0和1),它们是不可读的,因为其中的字节转换为包含许多其他不可打印字符的字符和符号,随便我们尝试使用任何文本编辑器读取二进制文件将显示为类似Ø和ð这样的字符. 但是二进制文件必须由特定程序读取才能使用.例如,Microsoft Word程序的二进制文件只能通过Word程序读取到人类可读的形式.这表明,除了人类可读的文本之外,还有更多的信息,如格式化的字符和页码等,它们也与字母数字字符一起存储.最后,二进制文件是一个连续的字节序列. 我们在

  • R语言对CSV文件操作实例讲解

    在 R 语言中,我们可以从存储在 R 语言环境外的文件中读取数据. 我们还可以将数据写入将被操作系统存储和访问的文件. R 语言可以读取和写入各种文件格式,如​csv​,​excel​,​xml​等. 在本章中,我们将学习从​csv​文件读取数据,然后将数据写入​csv​文件. 该文件应该存在于当前工作目录中,以便 R 语言可以读取它. 当然我们也可以设置我们自己的目录并从那里读取文件. 获取和设置工作目录 您可以使用​getwd()​函数检查R语言工作区指向的目录. 您还可以使用​setwd(

  • R语言对Excel文件操作实例

    Microsoft Excel是最广泛使用的电子表格程序,以.xls或.xlsx格式存储数据. R语言可以直接从这些文件使用一些excel特定的包. 很少这样的包是XLConnect,xlsx,gdata等.我们将使用xlsx包. R语言也可以使用这个包写入excel文件. 安装xlsx软件包 您可以在R控制台中使用以下命令来安装"xlsx"软件包. 它可能会要求安装一些额外的软件包这个软件包依赖. 按照具有所需软件包名称的同一命令安装其他软件包. install.packages(&

  • R语言对数据库进行操作的实例详解

    数据是关系数据库系统以规范化格式存储. 因此,要进行统计计算,我们将需要非常先进和复杂的Sql查询. 但R语言可以轻松地连接到许多关系数据库,如MySql,Oracle,Sql服务器等,并从它们获取记录作为数据框. 一旦数据在R语言环境中可用,它就变成正常的R语言数据集,并且可以使用所有强大的包和函数来操作或分析. 在本教程中,我们将使用MySql作为连接到R语言的参考数据库. RMySQL包 R语言有一个名为"RMySQL"的内置包,它提供与MySql数据库之间的本地连接. 您可以使

  • R语言对Web数据操作实例

    许多网站提供数据供其用户使用. 例如,世界卫生组织(WHO)以CSV,txt和XML文件的形式提供健康和医疗信息的报告. 使用R语言程序,我们可以从这些网站以编程方式提取特定数据. R语言中用于从网站中提取数据的一些包是"RCurl",XML"和"stringr",它们用于连接到URL,识别文件所需的链接并将它们下载到本地环境. 安装R语言的包 处理URL和链接到文件需要以下的包. 如果它们在R语言环境中不可用,您可以使用以下命令安装它们. install

  • R语言的Dataframe常用操作使用

    上节我们简单介绍了Dataframe的定义,这节我们具体来看一下Dataframe的操作 首先,数据框的创建函数为 data.frame( ),参考R语言的帮助文档,我们来了解一下data.frame( )的具体用法: Usage data.frame(..., row.names = NULL, check.rows = FALSE, check.names = TRUE, fix.empty.names = TRUE, stringsAsFactors = default.stringsAs

  • R语言差异检验:非参数检验操作

    非参数检验是在总体方差未知或知道甚少的情况下,利用样本数据对总体分布形态进行推断的方法.它利用数据的大小间的次序关系(秩Rank),而不是具体数值信息,得出推断结论. 它是参数检验所需要的某些条件不满足时所使用的方法. 和参数检验相比,非参数检验的优势如下: 稳健性.对总体分布的条件要求放宽 对数据类型要求不严格,适用有序分类变量 适用范围广 劣势: 没有利用实际数值,损失了部分信息,检验的有效性较差. 非参数性检验的方法非常多,基于方法的检验功效性角度,本文只涉及 双独立样本:Mann-Whi

  • R语言绘图样式设置操作(符号,线条,颜色,文本属性)

    设置图像样式有两种方法,一种是全局修改,一种只针对一幅图片有效. 全局修改 a<-c(1:10) #全局修改 old_par<-par(no.readonly=TRUE) #记录默认样式到变量old_par中 par(lty=2,pch=17) #设置线型lty=2虚线,pch=17实心三角形,键值对的方式进行设置 #第一幅图,已经和默认样式不一样了 b<-rnorm(10) plot(a,b,type='b') #第二幅图,和第一幅图样式一样 b<-rnorm(10) plot(

  • R语言 检验多重共线性的操作

    函数kappa() df<-data.frame() df_cor=cor(df) kappa(df_cor, exact=T) 当 κ<100κ<100 , 说明共线性程度小: 当 100<κ<1000100<κ<1000 , 有较强的多重共线性: 当 κ>1000κ>1000,存在严重的多重共线性. 函数qr() x<-matrix() qr(x)$rank qr(X)$rank 计算X矩阵的秩,如果不是满秩的,说明其中有xixi可以用其他x

随机推荐