R—data.table介绍以及例子
相比dplyr包,data.table包能够更大程度地提高数据的处理速度,这里就简单介绍一下data.tale包的使用方法。
data.table:用于快速处理大数据集的
1.数据的读取
data.table包中数据读取的函数:fread()
2.data.table的创建
> library(data.table)
> DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
> DT
x y v
1: a 1 1
2: a 3 2
3: a 6 3
4: b 1 4
5: b 3 5
6: b 6 6
7: c 1 7
8: c 3 8
9: c 6 9
>
3.基础操作
(1)行提取
行提取分为单行提取和多行提取。
单行提取
> DT[2] # 2nd row
x y v
1: a 3 2
> DT[2,] # same
x y v
1: a 3 2
>
这里DT [2]和DT [2]是完全相同的,这里的「,」只是说明还有其他参数可设置,而其他参数按默认值进行计算。下文所有这样的最后一个「,」都不再写出来。
多行提取
数字提取
> DT[1:2]
x y v
1: a 1 1
2: a 3 2
> DT[c(2,5)]
x y v
1: a 3 2
2: b 3 5
>
(2)逻辑提取
DT[c(FALSE,TRUE)] # even rows (usual recycling)
x y v
1: a 3 2
2: b 1 4
3: b 6 6
4: c 3 8
此时,C(FALSE,TRUE)会自己重复匹配成与DT的行数相同的向量
(3)列提取
与行提取相同,列的提取也包含单列提取和多列提取。
单列提取
数字提取
数字提取时,一定要把问心无愧参数设置为FALSE。
> DT[,2,with=FALSE] # 2nd column
y
1: 1
2: 3
3: 6
4: 1
5: 3
6: 6
7: 1
8: 3
9: 6
> DT[,2,with=TRUE] # 2nd column
y
1: 1
2: 3
3: 6
4: 1
5: 3
6: 6
7: 1
8: 3
9: 6
>
按照列名提取
> DT[,list(v)] # v column (as data.table)
v
1: 1
2: 2
3: 3
4: 4
5: 5
6: 6
7: 7
8: 8
9: 9
(4)列名的修改
列名的修改可以使用setnames()函数,这个函数好像比对data.frame类型数据名更改的名称()和colnames()函数也要快一些。
> dt = data.table(a=1:2,b=3:4,c=5:6) # compare to data.table
> dt
a b c
1: 1 3 5
2: 2 4 6
> try(tracemem(dt)) # by reference, no deep or shallow copies
[1] "<000000001C613E10>"
> dt
a b c
1: 1 3 5
2: 2 4 6
> setnames(dt,"b","B") # by name, no match() needed (warning if "b" is missing)
> dt
a B c
1: 1 3 5
2: 2 4 6
> setnames(dt,3,"C") # by position with warning if 3 > ncol(dt)
> dt
a B C
1: 1 3 5
2: 2 4 6
> setnames(dt,2:3,c("D","E")) # multiple
> dt
a D E
1: 1 3 5
2: 2 4 6
> setnames(dt,c("a","E"),c("A","F")) # multiple by name (warning if either "a" or "E" is missing)
> dt
A D F
1: 1 3 5
2: 2 4 6
> setnames(dt,c("X","Y","Z")) # replace all (length of names must be == ncol(DT))
> dt
X Y Z
1: 1 3 5
2: 2 4 6
>
多列提取
数字提取
如同上面对按数字对单列的提取,对多列提取也要设置与参数为FALSE。
> DT[,2:3,with=FALSE]
y v
1: 1 1
2: 3 2
3: 6 3
4: 1 4
5: 3 5
6: 6 6
7: 1 7
8: 3 8
9: 6 9
> DT[,c(1,3),with=FALSE]
x v
1: a 1
2: a 2
3: a 3
4: b 4
5: b 5
6: b 6
7: c 7
8: c 8