使用另一个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