1

我一直在努力解决这个问题很长一段时间,任何帮助将不胜感激。

我正在尝试编写一个函数来根据马尔可夫模型的观察数据计算转换矩阵。

我用来构建函数的初始数据看起来像这样;

 Season                 Team State
1        1    Manchester United     1
2        1              Chelsea     1
3        1      Manchester City     1
.
.
.
99       5    Charlton Athletic     4
100      5              Watford     4

有 5 个季节和 4 个州。

我知道我将如何计算转换矩阵,但为了做到这一点,我需要计算每个赛季从状态 i 移动到状态 j 的团队数量。

我需要能做这样的事情的代码,

a<-function(x,i,j){
if("team x is in state i in season 1 and state j in season 2") 1 else 0
}
sum(a)

然后我可以为每支球队和每对状态执行此操作,并在所有 5 个赛季中重复。但是,我很难弄清楚如何用引号告诉 R 事情。对不起,如果有一个非常明显的答案,但我是一个垃圾程序员。

非常感谢您的阅读!

4

1 回答 1

1

此函数告诉您团队是否从第 1 季到第 2 季从状态 1 转换到状态 2

a <- function(team, state1, state2, data, season1, season2) {  
  team.rows = data[team == data["Team",],]   
  in.season1.in.state1 = ifelse(team.rows["Season",]==season1 && team.rows["State",state1],1,0)
  in.season2.in.state2 = ifelse(team.rows["Season",]==season2 && team.rows["State",state2],1,0)   
  return(sum(in.season1.in.stat1) * sum(in.season2.in.state2)) 
}
  • 在第一行中,我选择了特定团队的所有行。
  • 第二行是为每个条目确定一个团队是否在第 1 季中处于状态 1。
  • 第三行是为每个条目确定一个团队是否在第 2 季中处于状态 2,
  • 如果球队在各自的赛季中从未处于各自的状态,则 return 语句返回 0,否则返回 1(仅在没有重复的情况下才有效,在这种情况下,它可能返回大于 1 的值)
于 2012-06-26T01:05:36.850 回答