内连接,看不到列
Inner join, can't see the column
我有以下两个数据集:
t_d <- setDT(structure(list(i_phase = c(1L, 1L, 1L, 1L, 1L, 1L, -1L, -1L,
-1L, -1L, -1L, -1L), Time = c(4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001), SimulationID = c(4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L), N = c(40L, 40L, 40L,
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L), discountFactor = c(0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), AgentID = c(4L, 5L, 4L, 5L,
4L, 5L, 1L, 2L, 3L, 1L, 2L, 3L), State = c(1L, 11L, 1L, 11L,
1L, 11L, 15L, 4L, 9L, 15L, 4L, 9L), displacement = c(1, -1, 1,
-1, 1, -1, -5, 0, -17, -5, 0, -17), aAgentID = c(1L, 1L, 2L,
2L, 3L, 3L, 4L, 4L, 4L, 5L, 5L, 5L), aState = c(15L, 15L, 4L,
4L, 9L, 9L, 1L, 1L, 1L, 11L, 11L, 11L), adisplacement = c(-5,
-5, 0, 0, -17, -17, 1, 1, 1, -1, -1, -1)), row.names = c(NA,
-12L), class = c("data.table", "data.frame")))
和
dStat <- setDT(structure(list(Time = c(4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001), AgentID = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L), SimulationID = c(4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L), N = c(40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L,
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L,
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L,
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L,
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L,
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L,
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L),
discountFactor = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), position = c(0,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)), row.names = c(NA,
-85L), class = c("data.table", "data.frame")))
我想做的是:
dStat[t_d, vDensity_againts:= mean(i.adisplacement), on=.(position=aState,AgentID = AgentID,Time,SimulationID,N,discountFactor), by=.(position,AgentID,Time,SimulationID,N,discountFactor)]
然而,它给了我
> object 'i.adisplacement' not found
我不明白,t_d
data.table 有一个列名称 adisplacement
如果我删除 vDensity_againts:= mean(i.adisplacement)
,我可以看到加入的 data.table也有一个列adisplacement
,但是当我想做一个像vDensity_againts:= mean(i.adisplacement)
这样的赋值时,它看不到那个列。
为什么会这样?
附录:
理想的输出代码应该是这样的
setDT(structure(list(Time = c(4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001), AgentID = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L), SimulationID = c(4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L), N = c(40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L,
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L,
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L,
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L,
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L,
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L,
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L),
discountFactor = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), position = c(0,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16), vDensity_againts = c(0,
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, -17, 0, 0, 0, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, -17, 0, 0, 0, 0, 0, -5, 0)), row.names = c(NA, -85L), class = c("data.table",
"data.frame"), index = structure(integer(0), "`__AgentID`" = integer(0))))
略有不同的代码,首先聚合,其次连接:
results <- t_d[, .(vDensity_againts=mean(adisplacement)), by=.(Time, AgentID, SimulationID, N, discountFactor, aState)
][ dStat, on=.(Time, AgentID, SimulationID, N, discountFactor, aState == position)
][, vDensity_againts := fcoalesce(vDensity_againts, 0)]
results
# Time AgentID SimulationID N discountFactor aState vDensity_againts
# <num> <int> <int> <int> <num> <int> <num>
# 1: 4001 1 4 40 0 0 0
# 2: 4001 1 4 40 0 1 1
# 3: 4001 1 4 40 0 2 0
# 4: 4001 1 4 40 0 3 0
# 5: 4001 1 4 40 0 4 0
# 6: 4001 1 4 40 0 5 0
# 7: 4001 1 4 40 0 6 0
# 8: 4001 1 4 40 0 7 0
# 9: 4001 1 4 40 0 8 0
# 10: 4001 1 4 40 0 9 0
# 11: 4001 1 4 40 0 10 0
# 12: 4001 1 4 40 0 11 -1
# 13: 4001 1 4 40 0 12 0
# 14: 4001 1 4 40 0 13 0
# 15: 4001 1 4 40 0 14 0
# 16: 4001 1 4 40 0 15 0
# 17: 4001 1 4 40 0 16 0
# 18: 4001 2 4 40 0 0 0
# 19: 4001 2 4 40 0 1 1
# 20: 4001 2 4 40 0 2 0
# 21: 4001 2 4 40 0 3 0
# 22: 4001 2 4 40 0 4 0
# 23: 4001 2 4 40 0 5 0
# 24: 4001 2 4 40 0 6 0
# 25: 4001 2 4 40 0 7 0
# 26: 4001 2 4 40 0 8 0
# 27: 4001 2 4 40 0 9 0
# 28: 4001 2 4 40 0 10 0
# 29: 4001 2 4 40 0 11 -1
# 30: 4001 2 4 40 0 12 0
# 31: 4001 2 4 40 0 13 0
# 32: 4001 2 4 40 0 14 0
# 33: 4001 2 4 40 0 15 0
# 34: 4001 2 4 40 0 16 0
# 35: 4001 3 4 40 0 0 0
# 36: 4001 3 4 40 0 1 1
# 37: 4001 3 4 40 0 2 0
# 38: 4001 3 4 40 0 3 0
# 39: 4001 3 4 40 0 4 0
# 40: 4001 3 4 40 0 5 0
# 41: 4001 3 4 40 0 6 0
# 42: 4001 3 4 40 0 7 0
# 43: 4001 3 4 40 0 8 0
# 44: 4001 3 4 40 0 9 0
# 45: 4001 3 4 40 0 10 0
# 46: 4001 3 4 40 0 11 -1
# 47: 4001 3 4 40 0 12 0
# 48: 4001 3 4 40 0 13 0
# 49: 4001 3 4 40 0 14 0
# 50: 4001 3 4 40 0 15 0
# 51: 4001 3 4 40 0 16 0
# 52: 4001 4 4 40 0 0 0
# 53: 4001 4 4 40 0 1 0
# 54: 4001 4 4 40 0 2 0
# 55: 4001 4 4 40 0 3 0
# 56: 4001 4 4 40 0 4 0
# 57: 4001 4 4 40 0 5 0
# 58: 4001 4 4 40 0 6 0
# 59: 4001 4 4 40 0 7 0
# 60: 4001 4 4 40 0 8 0
# 61: 4001 4 4 40 0 9 -17
# 62: 4001 4 4 40 0 10 0
# 63: 4001 4 4 40 0 11 0
# 64: 4001 4 4 40 0 12 0
# 65: 4001 4 4 40 0 13 0
# 66: 4001 4 4 40 0 14 0
# 67: 4001 4 4 40 0 15 -5
# 68: 4001 4 4 40 0 16 0
# 69: 4001 5 4 40 0 0 0
# 70: 4001 5 4 40 0 1 0
# 71: 4001 5 4 40 0 2 0
# 72: 4001 5 4 40 0 3 0
# 73: 4001 5 4 40 0 4 0
# 74: 4001 5 4 40 0 5 0
# 75: 4001 5 4 40 0 6 0
# 76: 4001 5 4 40 0 7 0
# 77: 4001 5 4 40 0 8 0
# 78: 4001 5 4 40 0 9 -17
# 79: 4001 5 4 40 0 10 0
# 80: 4001 5 4 40 0 11 0
# 81: 4001 5 4 40 0 12 0
# 82: 4001 5 4 40 0 13 0
# 83: 4001 5 4 40 0 14 0
# 84: 4001 5 4 40 0 15 -5
# 85: 4001 5 4 40 0 16 0
# Time AgentID SimulationID N discountFactor aState vDensity_againts
除了名称从 position
更改为 aState
(很容易),这与您的预期输出相同:
Map(all.equal, results, expected)
# $Time
# [1] TRUE
# $AgentID
# [1] TRUE
# $SimulationID
# [1] TRUE
# $N
# [1] TRUE
# $discountFactor
# [1] TRUE
# $aState
# [1] TRUE
# $vDensity_againts
# [1] TRUE
我有以下两个数据集:
t_d <- setDT(structure(list(i_phase = c(1L, 1L, 1L, 1L, 1L, 1L, -1L, -1L,
-1L, -1L, -1L, -1L), Time = c(4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001), SimulationID = c(4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L), N = c(40L, 40L, 40L,
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L), discountFactor = c(0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), AgentID = c(4L, 5L, 4L, 5L,
4L, 5L, 1L, 2L, 3L, 1L, 2L, 3L), State = c(1L, 11L, 1L, 11L,
1L, 11L, 15L, 4L, 9L, 15L, 4L, 9L), displacement = c(1, -1, 1,
-1, 1, -1, -5, 0, -17, -5, 0, -17), aAgentID = c(1L, 1L, 2L,
2L, 3L, 3L, 4L, 4L, 4L, 5L, 5L, 5L), aState = c(15L, 15L, 4L,
4L, 9L, 9L, 1L, 1L, 1L, 11L, 11L, 11L), adisplacement = c(-5,
-5, 0, 0, -17, -17, 1, 1, 1, -1, -1, -1)), row.names = c(NA,
-12L), class = c("data.table", "data.frame")))
和
dStat <- setDT(structure(list(Time = c(4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001), AgentID = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L), SimulationID = c(4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L), N = c(40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L,
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L,
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L,
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L,
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L,
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L,
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L),
discountFactor = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), position = c(0,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)), row.names = c(NA,
-85L), class = c("data.table", "data.frame")))
我想做的是:
dStat[t_d, vDensity_againts:= mean(i.adisplacement), on=.(position=aState,AgentID = AgentID,Time,SimulationID,N,discountFactor), by=.(position,AgentID,Time,SimulationID,N,discountFactor)]
然而,它给了我
> object 'i.adisplacement' not found
我不明白,t_d
data.table 有一个列名称 adisplacement
如果我删除 vDensity_againts:= mean(i.adisplacement)
,我可以看到加入的 data.table也有一个列adisplacement
,但是当我想做一个像vDensity_againts:= mean(i.adisplacement)
这样的赋值时,它看不到那个列。
为什么会这样?
附录:
理想的输出代码应该是这样的
setDT(structure(list(Time = c(4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
4001), AgentID = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L), SimulationID = c(4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L), N = c(40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L,
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L,
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L,
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L,
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L,
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L,
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L),
discountFactor = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), position = c(0,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16), vDensity_againts = c(0,
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, -17, 0, 0, 0, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, -17, 0, 0, 0, 0, 0, -5, 0)), row.names = c(NA, -85L), class = c("data.table",
"data.frame"), index = structure(integer(0), "`__AgentID`" = integer(0))))
略有不同的代码,首先聚合,其次连接:
results <- t_d[, .(vDensity_againts=mean(adisplacement)), by=.(Time, AgentID, SimulationID, N, discountFactor, aState)
][ dStat, on=.(Time, AgentID, SimulationID, N, discountFactor, aState == position)
][, vDensity_againts := fcoalesce(vDensity_againts, 0)]
results
# Time AgentID SimulationID N discountFactor aState vDensity_againts
# <num> <int> <int> <int> <num> <int> <num>
# 1: 4001 1 4 40 0 0 0
# 2: 4001 1 4 40 0 1 1
# 3: 4001 1 4 40 0 2 0
# 4: 4001 1 4 40 0 3 0
# 5: 4001 1 4 40 0 4 0
# 6: 4001 1 4 40 0 5 0
# 7: 4001 1 4 40 0 6 0
# 8: 4001 1 4 40 0 7 0
# 9: 4001 1 4 40 0 8 0
# 10: 4001 1 4 40 0 9 0
# 11: 4001 1 4 40 0 10 0
# 12: 4001 1 4 40 0 11 -1
# 13: 4001 1 4 40 0 12 0
# 14: 4001 1 4 40 0 13 0
# 15: 4001 1 4 40 0 14 0
# 16: 4001 1 4 40 0 15 0
# 17: 4001 1 4 40 0 16 0
# 18: 4001 2 4 40 0 0 0
# 19: 4001 2 4 40 0 1 1
# 20: 4001 2 4 40 0 2 0
# 21: 4001 2 4 40 0 3 0
# 22: 4001 2 4 40 0 4 0
# 23: 4001 2 4 40 0 5 0
# 24: 4001 2 4 40 0 6 0
# 25: 4001 2 4 40 0 7 0
# 26: 4001 2 4 40 0 8 0
# 27: 4001 2 4 40 0 9 0
# 28: 4001 2 4 40 0 10 0
# 29: 4001 2 4 40 0 11 -1
# 30: 4001 2 4 40 0 12 0
# 31: 4001 2 4 40 0 13 0
# 32: 4001 2 4 40 0 14 0
# 33: 4001 2 4 40 0 15 0
# 34: 4001 2 4 40 0 16 0
# 35: 4001 3 4 40 0 0 0
# 36: 4001 3 4 40 0 1 1
# 37: 4001 3 4 40 0 2 0
# 38: 4001 3 4 40 0 3 0
# 39: 4001 3 4 40 0 4 0
# 40: 4001 3 4 40 0 5 0
# 41: 4001 3 4 40 0 6 0
# 42: 4001 3 4 40 0 7 0
# 43: 4001 3 4 40 0 8 0
# 44: 4001 3 4 40 0 9 0
# 45: 4001 3 4 40 0 10 0
# 46: 4001 3 4 40 0 11 -1
# 47: 4001 3 4 40 0 12 0
# 48: 4001 3 4 40 0 13 0
# 49: 4001 3 4 40 0 14 0
# 50: 4001 3 4 40 0 15 0
# 51: 4001 3 4 40 0 16 0
# 52: 4001 4 4 40 0 0 0
# 53: 4001 4 4 40 0 1 0
# 54: 4001 4 4 40 0 2 0
# 55: 4001 4 4 40 0 3 0
# 56: 4001 4 4 40 0 4 0
# 57: 4001 4 4 40 0 5 0
# 58: 4001 4 4 40 0 6 0
# 59: 4001 4 4 40 0 7 0
# 60: 4001 4 4 40 0 8 0
# 61: 4001 4 4 40 0 9 -17
# 62: 4001 4 4 40 0 10 0
# 63: 4001 4 4 40 0 11 0
# 64: 4001 4 4 40 0 12 0
# 65: 4001 4 4 40 0 13 0
# 66: 4001 4 4 40 0 14 0
# 67: 4001 4 4 40 0 15 -5
# 68: 4001 4 4 40 0 16 0
# 69: 4001 5 4 40 0 0 0
# 70: 4001 5 4 40 0 1 0
# 71: 4001 5 4 40 0 2 0
# 72: 4001 5 4 40 0 3 0
# 73: 4001 5 4 40 0 4 0
# 74: 4001 5 4 40 0 5 0
# 75: 4001 5 4 40 0 6 0
# 76: 4001 5 4 40 0 7 0
# 77: 4001 5 4 40 0 8 0
# 78: 4001 5 4 40 0 9 -17
# 79: 4001 5 4 40 0 10 0
# 80: 4001 5 4 40 0 11 0
# 81: 4001 5 4 40 0 12 0
# 82: 4001 5 4 40 0 13 0
# 83: 4001 5 4 40 0 14 0
# 84: 4001 5 4 40 0 15 -5
# 85: 4001 5 4 40 0 16 0
# Time AgentID SimulationID N discountFactor aState vDensity_againts
除了名称从 position
更改为 aState
(很容易),这与您的预期输出相同:
Map(all.equal, results, expected)
# $Time
# [1] TRUE
# $AgentID
# [1] TRUE
# $SimulationID
# [1] TRUE
# $N
# [1] TRUE
# $discountFactor
# [1] TRUE
# $aState
# [1] TRUE
# $vDensity_againts
# [1] TRUE