plyr homework 2

require(plyr)
## Loading required package: plyr

1.对于R的内置数据集mtcars,利用plyr包的函数分别做以下操作: (1)计算每种汽车的disp/mpg,并按disp/mpg 的结果排序,输出一个包含汽车名的数据框


        cal1 = function ( disp , mpg , ... ) { disp / mpg };
        res_1_1 = splat ( cal1 )( mtcars );
        mtcars$res = res_1_1;                            #将结果保存到res
        mtcars = cbind ( rownames ( mtcars ) , mtcars );   #添加车名
        res_1_f = arrange ( mtcars , res );                ##1.(1)结果
        res_1_f
##       rownames(mtcars)  mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## 1       Toyota Corolla 33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
## 2             Fiat 128 32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
## 3          Honda Civic 30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
## 4            Fiat X1-9 27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
## 5         Lotus Europa 30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
## 6        Porsche 914-2 26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
## 7           Datsun 710 22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## 8        Toyota Corona 21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
## 9           Volvo 142E 21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
## 10           Merc 240D 24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## 11            Merc 230 22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## 12        Ferrari Dino 19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
## 13           Mazda RX4 21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
## 14       Mazda RX4 Wag 21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
## 15            Merc 280 19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
## 16           Merc 280C 17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
## 17      Hornet 4 Drive 21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
## 18             Valiant 18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
## 19          Merc 450SL 17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
## 20          Merc 450SE 16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
## 21         Merc 450SLC 15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
## 22   Hornet Sportabout 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
## 23         AMC Javelin 15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
## 24       Maserati Bora 15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
## 25    Dodge Challenger 15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
## 26    Pontiac Firebird 19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
## 27      Ford Pantera L 15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
## 28          Duster 360 14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
## 29          Camaro Z28 13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
## 30   Chrysler Imperial 14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
## 31 Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
## 32  Cadillac Fleetwood 10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
##       res
## 1   2.097
## 2   2.429
## 3   2.490
## 4   2.894
## 5   3.128
## 6   4.627
## 7   4.737
## 8   5.586
## 9   5.654
## 10  6.012
## 11  6.175
## 12  7.360
## 13  7.619
## 14  7.619
## 15  8.729
## 16  9.416
## 17 12.056
## 18 12.431
## 19 15.942
## 20 16.817
## 21 18.145
## 22 19.251
## 23 20.000
## 24 20.067
## 25 20.516
## 26 20.833
## 27 22.215
## 28 25.175
## 29 26.316
## 30 29.932
## 31 44.231
## 32 45.385

(2)计算数据集中disp的最小值,最大值,平均值和方差

cal_3 = function(disp, ...) {
    each(c("min", "max", "mean"))(disp)
}
res_1_2 = splat(cal_3)(mtcars)
res_1_2
##   min   max  mean 
##  71.1 472.0 230.7

(3) 将数据集中hp的名字改为Ghp

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

(4) 计算数据集中am变量中出现0的次数与出现1的次数

tab = count(mtcars, vars = "am")
tab
##   am freq
## 1  0   19
## 2  1   13

2 生成5组分别服从参数为(2,4),(1,2),(1,5)(5,7)(8,9)的均匀分布

n = rep(10, 5)
min = c(2, 1, 1, 5, 8)
max = c(4, 2, 5, 7, 9)
para = data.frame(n = n, min = min, max = max)
res_2 = mdply(para, runif)
res_2
##    n min max    V1    V2    V3    V4    V5    V6    V7    V8    V9   V10
## 1 10   2   4 3.758 3.444 3.114 3.176 3.326 2.142 2.166 2.584 2.347 3.981
## 2 10   1   2 1.421 1.609 1.962 1.270 1.064 1.456 1.319 1.301 1.963 1.679
## 3 10   1   5 4.762 3.272 2.801 1.662 2.370 4.935 2.655 2.304 3.622 4.769
## 4 10   5   7 6.879 5.188 6.405 5.131 5.888 5.643 6.693 5.455 5.014 6.826
## 5 10   8   9 8.569 8.803 8.120 8.454 8.241 8.882 8.673 8.620 8.012 8.497

3 x <- data.frame(k1 = c(NA,NA,3,4,5), k2 = c(1,NA,NA,4,5), data = 1:5)

y <- data.frame(k1 = c(NA,2,NA,4,5), k2 = c(NA,NA,3,4,5), data = 1:5) 以不同的type联合x与y,并简要说出不同type之间的不同。

x <- data.frame(k1 = c(NA, NA, 3, 4, 5), k2 = c(1, NA, NA, 4, 5), data = 1:5)
y <- data.frame(k1 = c(NA, 2, NA, 4, 5), k2 = c(NA, NA, 3, 4, 5), data = 1:5)
m1 = join(x, y, type = "left")
## Joining by: k1, k2, data
m2 = join(x, y, type = "inner")
## Joining by: k1, k2, data
m3 = join(x, y, type = "right")
## Joining by: k1, k2, data
m1
##   k1 k2 data
## 1 NA  1    1
## 2 NA NA    2
## 3  3 NA    3
## 4  4  4    4
## 5  5  5    5
m2
##   k1 k2 data
## 1  4  4    4
## 2  5  5    5
m3
##   k1 k2 data
## 1 NA NA    1
## 2  2 NA    2
## 3 NA  3    3
## 4  4  4    4
## 5  5  5    5

left 以左边输入的数据框为主进行归并,列出做数据框的所有取值,但右边的数据框只列出交集

right 将上边的描述对调即可

inner 只输出两个数据框的交集