【发布时间】:2018-04-12 13:47:27
【问题描述】:
我有一组类似的数据
a = data.table(
ID = c(1, 1, 2, 2, 2, 3, 3),
TOUR = c("USA", "CHINA", "CHINA", "CHINA", "EUROPE", "CANADA", "USA")
)
我想汇总数据来创建这个:
使用数据表.....谁能告诉我怎么做?
谢谢你,菲尔,
【问题讨论】:
标签: r datatable aggregation
我有一组类似的数据
a = data.table(
ID = c(1, 1, 2, 2, 2, 3, 3),
TOUR = c("USA", "CHINA", "CHINA", "CHINA", "EUROPE", "CANADA", "USA")
)
我想汇总数据来创建这个:
使用数据表.....谁能告诉我怎么做?
谢谢你,菲尔,
【问题讨论】:
标签: r datatable aggregation
我们可以首先使用.N(即行数)创建按“ID”分组的“NUMBER_OF_BOOKINGS”,然后使用fun.aggregate aslength 创建dcast`
dcast(a[, NUMBER_OF_BOOKINGS := .N, ID], ID + NUMBER_OF_BOOKINGS ~ TOUR, length)
# ID NUMBER_OF_BOOKINGS CANADA CHINA EUROPE USA
#1: 1 2 0 1 0 1
#2: 2 3 0 2 1 0
#3: 3 2 1 0 0 1
如果我们需要前缀"TOUR",请使用paste
dcast(a[, NUMBER_OF_BOOKINGS := .N, ID], ID + NUMBER_OF_BOOKINGS ~
paste0("TOUR_", TOUR), length)
上述方法还会在我们分配的原始数据集中创建一个列 (:=)。如果我们想避免这种情况,我们可以加入
a[, .(NUMBER_OF_BOOKINGS = .N), ID][dcast(a, ID ~ paste0("TOUR_", TOUR), length), on = .(ID)]
# ID NUMBER_OF_BOOKINGS TOUR_CANADA TOUR_CHINA TOUR_EUROPE TOUR_USA
#1: 1 2 0 1 0 1
#2: 2 3 0 2 1 0
#3: 3 2 1 0 0 1
【讨论】: