r - 使用 data.tables 时循环
问题描述
我有以下(代表性)数据集(实际数据集的一小部分)
structure(list(Time = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1), AgentID = 1:40, State = c(59L, 28L, 84L, 11L,
5L, 8L, 14L, 71L, 47L, 7L, 84L, 95L, 91L, 92L, 99L, 34L, 70L,
37L, 55L, 96L, 46L, 38L, 71L, 2L, 61L, 13L, 73L, 26L, 44L, 59L,
52L, 53L, 42L, 66L, 23L, 11L, 42L, 77L, 38L, 48L), Action = c(-1L,
-1L, 1L, -1L, 1L, 1L, 1L, -1L, -1L, -1L, -1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, -1L, -1L, 1L, 1L, -1L, 1L, 1L, -1L, -1L, 1L, -1L,
-1L, 1L, -1L, -1L, 1L, 1L, -1L, -1L, 1L, 1L, 1L), 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
), SimulationID = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), 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), i_phase = c(1L,
-1L, -1L, 1L, 1L, -1L, 1L, 1L, -1L, 1L, 1L, 1L, 1L, 1L, 1L, -1L,
-1L, 1L, 1L, 1L, 1L, -1L, -1L, 1L, -1L, -1L, -1L, -1L, -1L, -1L,
1L, -1L, -1L, -1L, -1L, 1L, -1L, 1L, 1L, -1L), i_antiPhase = c(-1,
1, 1, -1, -1, 1, -1, -1, 1, -1, -1, -1, -1, -1, -1, 1, 1, -1,
-1, -1, -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, -1, 1,
-1, -1, 1), totalCount = 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), phaseCount = c(20L, 20L,
20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L,
20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L,
20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L),
phaseCountVar = c(1.24104938271605, 1.15579357351509, 1.15579357351509,
1.24104938271605, 1.24104938271605, 1.15579357351509, 1.24104938271605,
1.24104938271605, 1.15579357351509, 1.24104938271605, 1.24104938271605,
1.24104938271605, 1.24104938271605, 1.24104938271605, 1.24104938271605,
1.15579357351509, 1.15579357351509, 1.24104938271605, 1.24104938271605,
1.24104938271605, 1.24104938271605, 1.15579357351509, 1.15579357351509,
1.24104938271605, 1.15579357351509, 1.15579357351509, 1.15579357351509,
1.15579357351509, 1.15579357351509, 1.15579357351509, 1.24104938271605,
1.15579357351509, 1.15579357351509, 1.15579357351509, 1.15579357351509,
1.24104938271605, 1.15579357351509, 1.24104938271605, 1.24104938271605,
1.15579357351509)), row.names = c(NA, -40L), class = c("data.table",
"data.frame"), .internal.selfref = <pointer: 0x5619bf50c210>)
其中 i_phase,i_antiPhase == +/-1。
我想做的是:
a[a, antiPhaseAgents:=list(i.AgentID[i_phase==x.i_antiPhase]), on=.(Time,SimulationID,N,SimulationID), by=.(x.AgentID,Time,SimulationID,N,discountFactor)]
换句话说,对于一个给定的(Time,SimulationID, N, discountFactor)
,对于所有不同AgentID
的 s in x
,分别找到所考虑的(来自)的THE的AgentID
s 。i
i_phase
i_antiPhase
AgentID
x
当然,上面代码中的语法是行不通的,所以我正在寻找实现上述操作的方法。
注意:data.table
首选纯溶液。
解决方案
如果我正确理解了您的问题:
a[a,.(x.AgentID,i.AgentID,Time,SimulationID,N,discountFactor,x.i_antiPhase), on=.(Time,SimulationID,N, i_phase=i_antiPhase),allow.cartesian=T][
,.(antiPhaseAgents=list(i.AgentID)),by=.(x.AgentID,Time,SimulationID,N,discountFactor)]
x.AgentID Time SimulationID N discountFactor antiPhaseAgents
1: 2 1 1 40 0 1, 4, 5, 7, 8,10,...
2: 3 1 1 40 0 1, 4, 5, 7, 8,10,...
3: 6 1 1 40 0 1, 4, 5, 7, 8,10,...
4: 9 1 1 40 0 1, 4, 5, 7, 8,10,...
5: 16 1 1 40 0 1, 4, 5, 7, 8,10,...
6: 17 1 1 40 0 1, 4, 5, 7, 8,10,...
推荐阅读
- haskell - Why doesn't Gloss render in native resolution?
- visual-studio - Can I somehow search in Visual Studio 2017 properties window using WinForms?
- python - 如何使用 Pandas 将共享数据的多行 CSV 合并为一行?
- java - Malformation in pom.xml file, by dependence
- reactjs - Design question about useContext in react hooks: similar components but with different context
- c# - Left Join only return values where UserID match
- javascript - 是否可以绕过损坏的 google reCaptcha?
- algorithm - Recursive complexity,the answer is wrong?
- php - 更改插件内 wordpress 函数的输出并在 wordpress 主题中使用它
- python - 在基于类的视图中计算访问次数。在模型中声明它