天天看點

R語言 data.table包 資料清理(二)

data.table包

這個包讓你可以更快地完成資料集的資料處理工作。放棄選取行或列子集的傳統方法,用這個包進行資料處理。用最少的代碼,你可以做最多的事。相比使用data.frame,data.table可以幫助你減少運算時間。你一定會對這個包的簡潔性感到震驚。

一個資料表格包含三部分,即DT[i, j, by]。你可以了解為我們告訴R用i來選出行的子集,并計算通過by來分組的j。大多數時候,by是用于類别變量的。在下面的代碼中,我用了兩個資料集(airquality和iris)。

library(data.table)

data(airquality)

mydata<-airquality

head(airquality,6)

 Ozone Solar.R Wind Temp Month Day

1    41     190  7.4   67     5   1

2    36     118  8.0   72     5   2

3    12     149 12.6   74     5   3

4    18     313 11.5   62     5   4

5    NA      NA 14.3   56     5   5

6    28      NA 14.9   66     5   6

data(iris)

myiris<-iris

mydata<-data.table(mydata)

Mydata

 Ozone Solar.R Wind Temp Month Day

  1:    41     190  7.4   67     5   1

  2:    36     118  8.0   72     5   2

  3:    12     149 12.6   74     5   3

  4:    18     313 11.5   62     5   4

  5:    NA      NA 14.3   56     5   5

 ---                                  

149:    30     193  6.9   70     9  26

150:    NA     145 13.2   77     9  27

151:    14     191 14.3   75     9  28

152:    18     131  8.0   76     9  29

153:    20     223 11.5   68     9  30

myiris<-data.table(myiris)

Myiris

 Sepal.Length Sepal.Width Petal.Length Petal.Width   Species

  1:          5.1         3.5          1.4         0.2    setosa

  2:          4.9         3.0          1.4         0.2    setosa

  3:          4.7         3.2          1.3         0.2    setosa

  4:          4.6         3.1          1.5         0.2    setosa

  5:          5.0         3.6          1.4         0.2    setosa

 ---                                                            

146:          6.7         3.0          5.2         2.3 virginica

147:          6.3         2.5          5.0         1.9 virginica

148:          6.5         3.0          5.2         2.0 virginica

149:          6.2         3.4          5.4         2.3 virginica

150:          5.9         3.0          5.1         1.8 virginica

#選擇2:4行

mydata[2:4,]

Ozone Solar.R Wind Temp Month Day

1:    36     118  8.0   72     5   2

2:    12     149 12.6   74     5   3

3:    18     313 11.5   62     5   4

#選擇特定列值

myiris[Species=="setosa"][1:6]

Sepal.Length Sepal.Width Petal.Length Petal.Width Species

1:          5.1         3.5          1.4         0.2  setosa

2:          4.9         3.0          1.4         0.2  setosa

3:          4.7         3.2          1.3         0.2  setosa

4:          4.6         3.1          1.5         0.2  setosa

5:          5.0         3.6          1.4         0.2  setosa

6:          5.4         3.9          1.7         0.4  setosa

#選擇具有多個值的列,這将給你setosa和virginica列

myiris[Species %in% c("setosa","virginica")]

#選擇列。傳回一個向量

mydata[,Temp]

 [1] 67 72 74 62 56 66 65 59 61 69 74 69 66 68 58 64 66 57 68 62 59 73 61 61

 [25] 57 58 57 67 81 79 76 78 74 67 84 85 79 82 87 90 87 93 92 82 80 79 77 72

 [49] 65 73 76 77 76 76 76 75 78 73 80 77 83 84 85 81 84 83 83 88 92 92 89 82

 [73] 73 81 91 80 81 82 84 87 85 74 81 82 86 85 82 86 88 86 83 81 81 81 82 86

 [97] 85 87 89 90 90 92 86 86 82 80 79 77 79 76 78 78 77 72 75 79 81 86 88 97

[121] 94 96 94 91 92 93 93 87 84 80 78 75 73 81 76 77 71 71 78 67 76 68 82 64

[145] 71 81 69 63 70 77 75 76 68

mydata[,.(Temp,Month)]

   Temp Month

  1:   67     5

  2:   72     5

  3:   74     5

  4:   62     5

  5:   56     5

 ---           

149:   70     9

150:   77     9

151:   75     9

152:   76     9

153:   68     9

#總和

mydata[,sum(Ozone,na.rm=T)]

[1] 4887

#總和和标準偏差

mydata[,.(sum(Ozone,na.rm=T),sd(Ozone,na.rm=T))]

     V1       V2

1: 4887 32.98788

myiris[,{print(Sepal.Length)

   plot(Sepal.Width)

   NULL}]

#一個組

myiris[,.(sepalsum=sum(Sepal.Length)),by=Species]

      Species sepalsum

1:     setosa    250.3

2: versicolor    296.8

3:  virginica    329.4

#計算選擇一列,是以需要設定的關鍵列

setkey(myiris,Species)

#選擇所有行與此相關的資料點

myiris['setosa']

myiris[c('setosa','virginica')]

繼續閱讀