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 只输出两个数据框的交集