在Excel中,我们可以轻松地实现数据的转置,在R语言中,同样可以做到
> car<-read.table('mtcars.csv',header = T,nrows = 5,sep=',')
> car
X mpg cyl disp hp drat wt qsec vs am gear carb
1 Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
2 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
3 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
4 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
5 Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
> t(car)
[,1] [,2] [,3] [,4]
X "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive"
mpg "21.0" "21.0" "22.8" "21.4"
cyl "6" "6" "4" "6"
disp "160" "160" "108" "258"
hp "110" "110" " 93" "110"
drat "3.90" "3.90" "3.85" "3.08"
wt "2.620" "2.875" "2.320" "3.215"
qsec "16.46" "17.02" "18.61" "19.44"
vs "0" "0" "1" "1"
am "1" "1" "1" "0"
gear "4" "4" "4" "3"
carb "4" "4" "1" "1"
[,5]
X "Hornet Sportabout"
mpg "18.7"
cyl "8"
disp "360"
hp "175"
drat "3.15"
wt "3.440"
qsec "17.02"
vs "0"
am "0"
gear "3"
carb "2"
若想对单独一列进行转置就要用到rev(),它是reverse的意思
> women
height weight
1 58 115
2 59 117
3 60 120
4 61 123
5 62 126
6 63 129
7 64 132
8 65 135
9 66 139
10 67 142
11 68 146
12 69 150
13 70 154
14 71 159
15 72 164
> rev(rownames(women))#先将列名翻转
[1] "15" "14" "13" "12" "11" "10" "9" "8" "7" "6" "5" "4" "3" "2" "1"
> women[rev(rownames(women)),]#在利用反转后的列名进行访问
height weight
15 72 164
14 71 159
13 70 154
12 69 150
11 68 146
10 67 142
9 66 139
8 65 135
7 64 132
6 63 129
5 62 126
4 61 123
3 60 120
2 59 117
1 58 115
若我们想改变数据某一列的值呢?
可以这样
> head(women)
height weight
1 58 115
2 59 117
3 60 120
4 61 123
5 62 126
6 63 129
> women1<-head(women)
[1] 58 59 60 61 62 63
> data.frame(women1$height*2.54,women1$weight)
women1.height...2.54 women1.weight
1 147.32 115
2 149.86 117
3 152.40 120
4 154.94 123
5 157.48 126
6 160.02 129
> data.frame(height=women1$height*2.54,weight=women1$weight)
height weight
1 147.32 115
2 149.86 117
3 152.40 120
4 154.94 123
5 157.48 126
6 160.02 129
当然,在R语言中,transform()函数可以直接实现这一点
> women2<-transform(women1,height=women1$height*2.54)
> women2
height weight
1 147.32 115
2 149.86 117
3 152.40 120
4 154.94 123
5 157.48 126
6 160.02 129
> transform(women1,cm=women1$height*2.54)
height weight cm
1 58 115 147.32
2 59 117 149.86
3 60 120 152.40
4 61 123 154.94
5 62 126 157.48
6 63 129 160.02
下面来介绍数据的排序
可以用sort()进行排序
Version:1.0 StartHTML:0000000107 EndHTML:0000005486 StartFragment:0000000127 EndFragment:0000005468
sort(x, decreasing = FALSE, na.last = NA, ...)
sort.int(x, partial = NULL, na.last = NA, decreasing = FALSE,
method = c("auto", "shell", "quick", "radix"), index.return = FALSE)
Arguments
x |
一个响亮,可以是数值型,复数型,字母或者逻辑型向量,或者是一个因子 |
decreasing |
逻辑值. 升序还是降序 |
... |
要传递给或从方法传递的参数,或(对于没有类的默认方法和对象)传递给sort.int的参数。 |
na.last |
用于控制缺失值的方法。如果为真,则将数据中缺失的值放在最后;如果是假的,就把它们放在第一位;如果是NA,它们就被移除。 |
partial |
空值 或者是部分排序的指标向量。
扫描二维码关注公众号,回复:
5641493 查看本文章
|
method |
指定使用的算法的字符串。无法进行部分排序。可以缩写。 |
index.return |
逻辑上指示是否也应该返回排序索引向量。方法==“基数”支持任何na。最后的模式和数据类型,以及其他方法当na。last = NA(默认值),并对非因素进行完全排序。 |
> rivers
[1] 735 320 325 392 524 450 1459 135 465 600
[11] 330 336 280 315 870 906 202 329 290 1000
[21] 600 505 1450 840 1243 890 350 407 286 280
[31] 525 720 390 250 327 230 265 850 210 630
[41] 260 230 360 730 600 306 390 420 291 710
[51] 340 217 281 352 259 250 470 680 570 350
[61] 300 560 900 625 332 2348 1171 3710 2315 2533
[71] 780 280 410 460 260 255 431 350 760 618
[81] 338 981 1306 500 696 605 250 411 1054 735
[91] 233 435 490 310 460 383 375 1270 545 445
[101] 1885 380 300 380 377 425 276 210 800 420
[111] 350 360 538 1100 1205 314 237 610 360 540
[121] 1038 424 310 300 444 301 268 620 215 652
[131] 900 525 246 360 529 500 720 270 430 671
[141] 1770
> sort(rivers)
[1] 135 202 210 210 215 217 230 230 233 237
[11] 246 250 250 250 255 259 260 260 265 268
[21] 270 276 280 280 280 281 286 290 291 300
[31] 300 300 301 306 310 310 314 315 320 325
[41] 327 329 330 332 336 338 340 350 350 350
[51] 350 352 360 360 360 360 375 377 380 380
[61] 383 390 390 392 407 410 411 420 420 424
[71] 425 430 431 435 444 445 450 460 460 465
[81] 470 490 500 500 505 524 525 525 529 538
[91] 540 545 560 570 600 600 600 605 610 618
[101] 620 625 630 652 671 680 696 710 720 720
[111] 730 735 735 760 780 800 840 850 870 890
[121] 900 900 906 981 1000 1038 1054 1100 1171 1205
[131] 1243 1270 1306 1450 1459 1770 1885 2315 2348 2533
[141] 3710
>
同样也可以对字符串型向量进行排序,因为在电脑中字母是被储存为ASCLL码的
> sort(state.name)
[1] "Alabama" "Alaska" "Arizona"
[4] "Arkansas" "California" "Colorado"
[7] "Connecticut" "Delaware" "Florida"
[10] "Georgia" "Hawaii" "Idaho"
[13] "Illinois" "Indiana" "Iowa"
[16] "Kansas" "Kentucky" "Louisiana"
[19] "Maine" "Maryland" "Massachusetts"
[22] "Michigan" "Minnesota" "Mississippi"
[25] "Missouri" "Montana" "Nebraska"
[28] "Nevada" "New Hampshire" "New Jersey"
[31] "New Mexico" "New York" "North Carolina"
[34] "North Dakota" "Ohio" "Oklahoma"
[37] "Oregon" "Pennsylvania" "Rhode Island"
[40] "South Carolina" "South Dakota" "Tennessee"
[43] "Texas" "Utah" "Vermont"
[46] "Virginia" "Washington" "West Virginia"
[49] "Wisconsin" "Wyoming"
还可以利用rev()达到向相反方向排序的效果
> rev(sort(rivers))
[1] 3710 2533 2348 2315 1885 1770 1459 1450 1306 1270
[11] 1243 1205 1171 1100 1054 1038 1000 981 906 900
[21] 900 890 870 850 840 800 780 760 735 735
[31] 730 720 720 710 696 680 671 652 630 625
[41] 620 618 610 605 600 600 600 570 560 545
[51] 540 538 529 525 525 524 505 500 500 490
[61] 470 465 460 460 450 445 444 435 431 430
[71] 425 424 420 420 411 410 407 392 390 390
[81] 383 380 380 377 375 360 360 360 360 352
[91] 350 350 350 350 340 338 336 332 330 329
[101] 327 325 320 315 314 310 310 306 301 300
[111] 300 300 291 290 286 281 280 280 280 276
[121] 270 268 265 260 260 259 255 250 250 250
[131] 246 237 233 230 230 217 215 210 210 202
[141] 135
> sort(rivers,decreasing = T)
[1] 3710 2533 2348 2315 1885 1770 1459 1450 1306 1270
[11] 1243 1205 1171 1100 1054 1038 1000 981 906 900
[21] 900 890 870 850 840 800 780 760 735 735
[31] 730 720 720 710 696 680 671 652 630 625
[41] 620 618 610 605 600 600 600 570 560 545
[51] 540 538 529 525 525 524 505 500 500 490
[61] 470 465 460 460 450 445 444 435 431 430
[71] 425 424 420 420 411 410 407 392 390 390
[81] 383 380 380 377 375 360 360 360 360 352
[91] 350 350 350 350 340 338 336 332 330 329
[101] 327 325 320 315 314 310 310 306 301 300
[111] 300 300 291 290 286 281 280 280 280 276
[121] 270 268 265 260 260 259 255 250 250 250
[131] 246 237 233 230 230 217 215 210 210 202
[141] 135
如果我们要对数据框进行排序呢?
当然我们可以像之前一样,先对一列进行排序,然后再索引
> a<-head(mtcars)
> a
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
> a[sort(rownames(a)),]
mpg cyl disp hp drat wt qsec vs am gear carb
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
order()也可以对向量进行排序,但是返回的值时向量的位置,而不是向量元素的值
order(..., na.last = TRUE, decreasing = FALSE,
method = c("auto", "shell", "radix"))
sort.list(x, partial = NULL, na.last = TRUE, decreasing = FALSE,
method = c("auto", "shell", "quick", "radix"))
Arguments
... |
一个数值型,复数型,字符型,或者逻辑型向量的序列 |
x |
一个不可分向量 |
partial |
向量部分排序. (不实现非空值) |
decreasing |
逻辑值. 降序还是升序排列, 基数方式, 它可以是一个长度等于参数个数的向量 |
na.last |
用于控制缺失值的方式。如果为真,则将数据中缺失的值放在最后;如果是假,他们被放在第一位;如果是NA,它们就被移除 |
method |
使用的方法:允许部分匹配。默认值(“auto”)表示短数值向量、整数向量、逻辑向量和因子的“基数”。否则,它意味着“shell”。有关“shell”、“quick”和“基数”方法的详细信息。 |
> sort(rivers)
[1] 135 202 210 210 215 217 230 230 233 237 246 250
[13] 250 250 255 259 260 260 265 268 270 276 280 280
[25] 280 281 286 290 291 300 300 300 301 306 310 310
[37] 314 315 320 325 327 329 330 332 336 338 340 350
[49] 350 350 350 352 360 360 360 360 375 377 380 380
[61] 383 390 390 392 407 410 411 420 420 424 425 430
[73] 431 435 444 445 450 460 460 465 470 490 500 500
[85] 505 524 525 525 529 538 540 545 560 570 600 600
[97] 600 605 610 618 620 625 630 652 671 680 696 710
[109] 720 720 730 735 735 760 780 800 840 850 870 890
[121] 900 900 906 981 1000 1038 1054 1100 1171 1205 1243 1270
[133] 1306 1450 1459 1770 1885 2315 2348 2533 3710
> order(rivers)
[1] 8 17 39 108 129 52 36 42 91 117 133 34 56 87 76
[16] 55 41 75 37 127 138 107 13 30 72 53 29 19 49 61
[31] 103 124 126 46 94 123 116 14 2 3 35 18 11 65 12
[46] 81 51 27 60 78 111 54 43 112 119 134 97 105 102 104
[61] 96 33 47 4 28 73 88 48 110 122 106 139 77 92 125
[76] 100 6 74 95 9 57 93 84 136 22 5 31 132 135 113
[91] 120 99 62 59 10 21 45 86 118 80 128 64 40 130 140
[106] 58 85 50 32 137 44 1 90 79 71 109 24 38 15 26
[121] 63 131 16 82 20 121 89 114 67 115 25 98 83 23 7
[136] 141 101 69 66 70 68
也正由于这样,在索引的时候可以直接用order()进行
> a
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
> a[order(a$mpg),]#注意不要忘记加逗号
mpg cyl disp hp drat wt qsec vs am gear carb
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
我们随机抽取mtcars中的数据
> h<-sample(rownames(b),size=10,replace=F)
> b[h,]
X mpg cyl disp hp drat wt qsec vs am gear carb
1 Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
11 Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
29 Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
31 Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
28 Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
15 Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
32 Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
19 Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
3 Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
22 Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
若我们想反向排列
可以
> q[order(-q$mpg),]
X mpg cyl disp hp drat wt qsec vs am gear carb
28 Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
19 Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
3 Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
32 Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
1 Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
11 Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
29 Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
22 Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
31 Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
15 Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
> q[order(q$mpg,decreasing = T),]
X mpg cyl disp hp drat wt qsec vs am gear carb
28 Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
19 Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
3 Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
32 Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
1 Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
11 Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
29 Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
22 Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
31 Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
15 Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
也可以利用order()函数进行多条件排序,
> a
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
> subset(a,select=1:4)
mpg cyl disp hp
Mazda RX4 21.0 6 160 110
Mazda RX4 Wag 21.0 6 160 110
Datsun 710 22.8 4 108 93
Hornet 4 Drive 21.4 6 258 110
Hornet Sportabout 18.7 8 360 175
Valiant 18.1 6 225 105
> b<-subset(a,select=1:4)
> b[order(a$mpg,a$disp),]
mpg cyl disp hp
Valiant 18.1 6 225 105
Hornet Sportabout 18.7 8 360 175
Mazda RX4 21.0 6 160 110
Mazda RX4 Wag 21.0 6 160 110
Hornet 4 Drive 21.4 6 258 110
Datsun 710 22.8 4 108 93
这样,在mpg相同的情况下,disp更小的排到了前面。