天天看點

練習:資料整理,R

library(car)

library(reshape2)

str(mtcars)

> str(mtcars)

'data.frame': 32 obs. of  11 variables:

 $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...

 $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...

 $ disp: num  160 160 108 258 360 ...

 $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...

 $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...

 $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...

 $ qsec: num  16.5 17 18.6 19.4 17 ...

 $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...

 $ am  : num  1 1 1 0 0 0 0 0 0 0 ...

 $ gear: num  4 4 4 3 3 3 3 4 4 4 ...

 $ carb: num  4 4 1 1 2 1 4 2 2 4 ...

mtcarMelt=melt(mtcars,id.vars=c("cyl","gear"),variable.name = 'carvariable',value.name = 'carvalue')

tail(mtcarMelt)

 >tail(mtcarMelt)

    cyl gear carvariable carvalue

283   4    5        carb        2

284   4    5        carb        2

285   8    5        carb        4

286   6    5        carb        6

287   8    5        carb        8

288   4    4        carb        2

mtcarsCast=dcast(mtcarsMelt,cyl+gear~variable,fun.aggregate =mean)

head(mtcarsCast)

 cyl gear    mpg    disp    hp drat       wt    qsec  vs   am carb

1   4    3 21.500 120.100  97.0 3.70 2.465000 20.0100 1.0 0.00  1.0

2   4    4 26.925 102.625  76.0 4.11 2.378125 19.6125 1.0 0.75  1.5

3   4    5 28.200 107.700 102.0 4.10 1.826500 16.8000 0.5 1.00  2.0

4   6    3 19.750 241.500 107.5 2.92 3.337500 19.8300 1.0 0.00  1.0

5   6    4 19.750 163.800 116.5 3.91 3.093750 17.6700 0.5 0.50  4.0

6   6    5 19.700 145.000 175.0 3.62 2.770000 15.5000 0.0 1.00  6.0

head(mtcars)

> head(mtcars)

                   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

StuId <- c(1:10)

StuName <- c('John Davis','Angela Williams','Bull >Jones','Cheryl Cushing','Reuven Ytzrhak','Joel Knox','Mary Rayburn','Greg England','Brad Tmac','Tracy Mcgrady')

Math <- c(502,465,621,575,454,634,576,421,599,666)

Science <- c(95,67,78,66,96,89,78,56,68,10)

English <- c(25,12,22,18,15,30,37,12,22,38)

mydata <- data.frame(StuId,StuName,Math,Science,English)

mydata

> mydata

   StuId         StuName Math Science English

1      1      John Davis  502      95      25

2      2 Angela Williams  465      67      12

3      3     Bull >Jones  621      78      22

4      4  Cheryl Cushing  575      66      18

5      5  Reuven Ytzrhak  454      96      15

6      6       Joel Knox  634      89      30

7      7    Mary Rayburn  576      78      37

8      8    Greg England  421      56      12

9      9       Brad Tmac  599      68      22

10    10   Tracy Mcgrady  666      10      38

> scale(mydata[,3:5], center=T,scale=T)

            Math     Science    English

 [1,] -0.5817963  0.98895866  0.2006619

 [2,] -1.0184385 -0.13212808 -1.1722882

 [3,]  0.8225395  0.30829885 -0.1161727

 [4,]  0.2796870 -0.17216689 -0.5386189

 [5,] -1.1482510  1.02899747 -0.8554535

 [6,]  0.9759544  0.74872578  0.7287197

 [7,]  0.2914882  0.30829885  1.4680005

 [8,] -1.5376887 -0.57255501 -1.1722882

 [9,]  0.5629144 -0.09208927 -0.1161727

[10,]  1.3535909 -2.41434036  1.5736120

attr(,"scaled:center")

   Math Science English 

  551.3    70.3    23.1 

attr(,"scaled:scale")

     Math   Science   English 

84.737569 24.975766  9.468662 

> mydata$score <- apply(z,1,mean)

> mydata

   StuId         StuName Math Science English      score

1      1      John Davis  502      95      25  0.2026081

2      2 Angela Williams  465      67      12 -0.7742849

3      3     Bull >Jones  621      78      22  0.3382219

4      4  Cheryl Cushing  575      66      18 -0.1436996

5      5  Reuven Ytzrhak  454      96      15 -0.3249024

6      6       Joel Knox  634      89      30  0.8177999

7      7    Mary Rayburn  576      78      37  0.6892625

8      8    Greg England  421      56      12 -1.0941773

9      9       Brad Tmac  599      68      22  0.1182175

10    10   Tracy Mcgrady  666      10      38  0.1709542

StuId <- c(1:10)

StuName <- c('John Davis','Angela Williams','Bull Jones','Cheryl Cushing','Reuven Ytzrhak','Joel Knox','Mary Rayburn','Greg England','Brad Tmac','Tracy Mcgrady')

Math <- c(502,465,621,575,454,634,576,421,599,666)

Science <- c(95,67,78,66,96,89,78,56,68,10)

English <- c(25,12,22,18,15,30,37,12,22,38)

mydata <- data.frame(StuId,StuName,Math,Science,English)

mydata

library(dplyr)

z=scale(mydata[,3:5], center=T,scale=T) 

mydata$score <- apply(z,1,mean)

mydata

q<-quantile(mydata$score,c(.8,.6,.4,.2)) 

q

attach(mydata)

mydata$level[score>=q[1]] <- "A"

mydata$level[score>=q[2] & score<q[1]] <- "B"

mydata$level[score>=q[3] & score<q[2]] <- "C"

mydata$level[score>=q[4] & score<q[3]] <- "D"

mydata$level[score<q[4]] <- "E"

name<-strsplit(StuName,split=" ")

name

name<-unlist(strsplit(StuName,split=" "))

name

name<-matrix(name,ncol=2,byrow=T)

name

FirName<-name[,1]

LasName<-name[,2]

mydata<-cbind(mydata,FirName,LasName)

name<-strsplit((StuName)," ")

lastname<-sapply(name,"[",2)

lastname

firstname<-sapply(name,"[",1)

firstname

mydata<-cbind(mydata,FirName,LasName)

mydata

options(digits=2)

 mydata<-mydata[order(mydata$LasName,mydata$FirName),]

 mydata