table 序号_R语言data.table常用特殊符号

这篇博客介绍了R语言中data.table库的高效使用方法,包括利用.SD和.SDcols对列进行筛选及计算均值,通过.N获取每组长度,使用.I获取行号,以及创建新的分组变量.grp。示例展示了如何进行数据分组、计算统计量以及操作行索引。
摘要由CSDN通过智能技术生成

c45f42be893e9f3c8637ce6a8c247d82.png

.SD, .SDcols

.SD是指数据中的子集,具体功能是对列进行筛选,可以配合by一起使用。.SDcols可以选择列的子集。

library(data.table)
# 生成一个数据
DT = data.table(
x = rep(c('b', 'a', 'c'), each = 3),
v = c(1, 1, 1, 2, 2, 1, 1, 2, 2),
y = c(1, 3, 6),
a = 1:9,
b = 9:1
)
DT
#>    x v y a b
#> 1: b 1 1 1 9
#> 2: b 1 3 2 8
#> 3: b 1 6 3 7
#> 4: a 2 1 4 6
#> 5: a 2 3 5 5
#> 6: a 1 6 6 4
#> 7: c 1 1 7 3
#> 8: c 2 3 8 2
#> 9: c 2 6 9 1

# 对除了 x 之外的列求均值
DT[ , lapply(.SD, mean), by = x] 
#>    x v y a b
#> 1: b 1.000000 3.333333 2 8
#> 2: a 1.666667 3.333333 5 5
#> 3: c 1.666667 3.333333 8 2

# 选择列
DT[ , lapply(.SD, mean), by = x,.SDcols=c('v','y')] 
#>    x v y
#> 1: b 1.000000 3.333333
#> 2: a 1.666667 3.333333
#> 3: c 1.666667 3.333333

.N.I

.N.I应当合起来讲。.N类似nrow()函数,即返回每组的长度,也就是最大行号。而.I类似seq_len(nrow(x)),就是返回行号。

DT[, .I[1], by=x]
#>    x V1
#> 1: b 1
#> 2: a 4
#> 3: c 7

# 方括号内可以选择每组内的行数
DT[, .I[-2], by=x] 
#>    x V1
#> 1: b 1
#> 2: b 3
#> 3: a 4
#> 4: a 6
#> 5: c 7
#> 6: c 9

# 输出每组的行数
DT[, .N, by=x] 
#>    x N
#> 1: b 3
#> 2: a 3
#> 3: c 3

# 返回组内行号
DT[,rownum:=1:.N,by=x]
DT
#>    x v y a b rownum
#> 1: b 1 1 1 9      1
#> 2: b 1 3 2 8      2
#> 3: b 1 6 3 7      3
#> 4: a 2 1 4 6      1
#> 5: a 2 3 5 5      2
#> 6: a 1 6 6 4      3
#> 7: c 1 1 7 3      1
#> 8: c 2 3 8 2      2
#> 9: c 2 6 9 1      3

.GRP

.GRP生成分组序号,在根据多变量分组的时候很有用。

# grp 变量将每一组标上序号
DT[, grp := .GRP, by=.(x,v)] 
DT
#> x v y a b grp
#> 1: b 1 1 1 9 1
#> 2: b 1 3 2 8 1
#> 3: b 1 6 3 7 1
#> 4: a 2 1 4 6 2
#> 5: a 2 3 5 5 2
#> 6: a 1 6 6 4 3
#> 7: c 1 1 7 3 4
#> 8: c 2 3 8 2 5
#> 9: c 2 6 9 1 5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值