使用另一个data.table对R data.table进行子集设置

使用另一个data.table对R data.table进行子集设置,r,data.table,subset,R,Data.table,Subset,我有一个与和相同的问题 dt是相同的 dt id year event 1: 2 2005 1 2: 2 2006 1 3: 2 2007 1 4: 4 2008 1 5: 4 2009 1 6: 2 2005 0 7: 4 2006 0 8: 4 2007 0 9: 2 2008 0 dt <- data.table(id = c(2,2,2,4,4,2,4,4,2), year = c(

我有一个与和相同的问题

dt
是相同的

dt

   id year event
1:  2 2005     1
2:  2 2006     1
3:  2 2007     1
4:  4 2008     1
5:  4 2009     1
6:  2 2005     0
7:  4 2006     0
8:  4 2007     0
9:  2 2008     0

dt <- data.table(id = c(2,2,2,4,4,2,4,4,2), year = c(2005:2009,2005:2008),
                 event = rep(1:0, times=c(5, 4)))
我想根据
dt
id
拆分
dt1
,并按事件分组。所需的输出应该是两个不同的数据表:

dt1.sub1
   year performance  event
1: 2005        1000      1
2: 2006        1001      1
3: 2007        1002      1
4: 2005        1005      0
5: 2008        1008      0


dt1.sub2
   year performance  event
1: 2008        1003      1
2: 2009        1004      1
3: 2006        1006      0
4: 2007        1007      0

有没有不使用合并的方法来实现这一点?

我们可以使用
split
来创建一个
列表
“data.tables”

lst <- split(dt1, dt$id)
names(lst) <- paste0('dt1.sub', seq_along(lst))
lst
#$dt1.sub1
#   year performance event
#1: 2005        1000     1
#2: 2006        1001     1
#3: 2007        1002     1
#4: 2005        1005     0
#5: 2008        1008     0

#$dt1.sub2
#   year performance event
#1: 2008        1003     1
#2: 2009        1004     1
#3: 2006        1006     0
#4: 2007        1007     0

不,我犯了一个错误,
dt
dt
中的所有内容都是一样的,只是
dt
有一个附加的
id
列。我想根据
dt
id
来拆分
dt1
。不,我认为你不应该编辑/清理你的问题。不清楚你在问什么。
lst <- split(dt1, dt$id)
names(lst) <- paste0('dt1.sub', seq_along(lst))
lst
#$dt1.sub1
#   year performance event
#1: 2005        1000     1
#2: 2006        1001     1
#3: 2007        1002     1
#4: 2005        1005     0
#5: 2008        1008     0

#$dt1.sub2
#   year performance event
#1: 2008        1003     1
#2: 2009        1004     1
#3: 2006        1006     0
#4: 2007        1007     0
list2env(lst, envir = .GlobalEnv)
dt[dt1, on = c('year', 'event')][, .(list(.SD)), by = id]$V1
#[[1]]
#   year event performance
#1: 2005     1        1000
#2: 2006     1        1001
#3: 2007     1        1002
#4: 2005     0        1005
#5: 2008     0        1008
#
#[[2]]
#   year event performance
#1: 2008     1        1003
#2: 2009     1        1004
#3: 2006     0        1006
#4: 2007     0        1007