这个包让你可以更快地完成数据集的数据处理工作。放弃选取行或列子集的传统方法,用这个包进行数据处理。用最少的代码,你可以做最多的事。相比使用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')]