从 data.table 选择列

在 R 中使用 data.table 进行数据处理

Matt Dowle, Arun Srinivasan

Instructors, DataCamp

data.table 语法通用形式(回顾)

第二个参数 j 用于选择列(并在其上计算)

# data.table 语法通用形式
DT[i, j, by]
   |  |  |
   |  |  --> 按什么分组?
   |  -----> 做什么?
   --------> 哪些行?
在 R 中使用 data.table 进行数据处理

用列名选择列

j 参数可接受列名的字符向量

ans <- batrips[, c("trip_id", "duration")]
head(ans, 2)
trip_id duration
139545      435
139546      432
在 R 中使用 data.table 进行数据处理

用列名选择列

batrips_df <- as.data.frame(batrips)
ans <- batrips_df[, "trip_id"]
head(ans, 2)
# 结果是向量,而不是 data.frame
139545, 139546
ans <- batrips[, "trip_id"]
# 仍是 data.table,而不是向量
head(ans, 2) 
trip_id
139545
139546
在 R 中使用 data.table 进行数据处理

用列号代替列名也可以

ans <- batrips[, c(2, 4)]
head(ans, 2)
duration  start_station
435       San Francisco City Hall
432       San Francisco City Hall

但这被视为不佳实践

# 如果列顺序改变,结果会出错
batrips[, c(2, 4)]

# 指定列名则始终正确,与顺序无关
batrips[, c("duration", "start_station")]
在 R 中使用 data.table 进行数据处理

使用字符向量取消选择列

  • -c("col1", "col2", ...) 取消选择指定列
  • 仅在 data.table 中提供的便捷功能
  • ! 代替 -,效果相同
# 选择除以下列外的所有列
ans <- batrips[, -c("start_date", "end_date", "end_station")]
head(ans, 1)
trip_id  duration  start_station             start_terminal  bike_id  end_terminal
139545   435       San Francisco City Hall   58              65       473 

subscription_type  zip_code
Subscriber         94612
在 R 中使用 data.table 进行数据处理

用 data.table 的方式选择列

还记得上一章在 i 参数中把列当作变量用吗?

# 回顾 "i" 参数
# 所有超过一小时的行程
batrips[duration > 3600]

类似地,您可以用变量列表(列名)来选择列

ans <- batrips[, list(trip_id, dur = duration)]
head(ans, 2)
trip_id     dur
139545      435
139546      432
在 R 中使用 data.table 进行数据处理

选择单列时,不用 list() 包裹会返回一个 vector

# 选择单列并返回 data.table
ans <- batrips[, list(trip_id)]
head(ans ,2)
trip_id
139545
139546
# 选择单列并返回向量
ans <- batrips[, trip_id]
head(ans, 2)
139545 139546
在 R 中使用 data.table 进行数据处理

用 data.table 的方式选择列

.()list() 的别名,便于书写

# .() 与 list() 等价
ans <- batrips[, .(trip_id, duration)]
head(ans, 2)
trip_id duration
139545      435
139546      432
在 R 中使用 data.table 进行数据处理

Passons à la pratique !

在 R 中使用 data.table 进行数据处理

Preparing Video For Download...