R语言 data.table包 数据清理(二)

4 篇文章 0 订阅

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

#选择具有多个值的列,这将给你setosavirginica

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')]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值