在R数据表中,如何进行子集和计数?

在R数据表中,如何进行子集和计数?,r,datatable,aggregation,R,Datatable,Aggregation,我有一组类似的数据 a = data.table( ID = c(1, 1, 2, 2, 2, 3, 3), TOUR = c("USA", "CHINA", "CHINA", "CHINA", "EUROPE", "CANADA", "USA") ) 我想汇总数据来创建以下内容: 使用数据表…谁能告诉我怎么做 谢谢你,Phil,我们可以先创建“预订数量”,按“ID”分组,用.N即行数,然后用fun.aggregate作为长度创建dcast` dcast(a[, NUMBER_OF_

我有一组类似的数据

a = data.table(
  ID = c(1, 1, 2, 2, 2, 3, 3),
  TOUR = c("USA", "CHINA", "CHINA", "CHINA", "EUROPE", "CANADA", "USA")
)
我想汇总数据来创建以下内容:

使用数据表…谁能告诉我怎么做

谢谢你,Phil,

我们可以先创建“预订数量”,按“ID”分组,用
.N
即行数,然后用
fun.aggregate作为
长度创建
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”
,请使用
粘贴

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
我们可以首先创建“预订数量”,按“ID”分组,使用
.N
即行数,然后使用
fun.aggregate作为
长度创建
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”
,请使用
粘贴

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

非常感谢。菲尔,谢谢你。菲尔,