Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何计算R中的最近性_R_Rows_Data Manipulation - Fatal编程技术网

如何计算R中的最近性

如何计算R中的最近性,r,rows,data-manipulation,R,Rows,Data Manipulation,我有以下数据: set.seed(20) round<-rep(1:10,2) part<-rep(1:2, c(10,10)) game<-rep(rep(1:2,c(5,5)),2) pay1<-sample(1:10,20,replace=TRUE) pay2<-sample(1:10,20,replace=TRUE) pay3<-sample(1:10,20,replace=TRUE) decs<-sample(1:3,20,replace=TR

我有以下数据:

set.seed(20)
round<-rep(1:10,2)
part<-rep(1:2, c(10,10))
game<-rep(rep(1:2,c(5,5)),2)
pay1<-sample(1:10,20,replace=TRUE)
pay2<-sample(1:10,20,replace=TRUE)
pay3<-sample(1:10,20,replace=TRUE)
decs<-sample(1:3,20,replace=TRUE)
previous_max<-c(0,1,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,1,0)
gamematrix<-cbind(part,game,round,pay1,pay2,pay3,decs,previous_max )
gamematrix<-data.frame(gamematrix)
我如何计算一个新的指标变量“previous_max”,该变量返回是否在同一游戏的下一轮中,同一参与者选择上一轮的最大收益。 所以我想要如下的东西:

参与者(第1部分):

在每场比赛的第一轮中,前一个_max为“0”(无前一轮),在第二轮中,前一个_max=“1”,因为在第一轮中,最高工资为max(pay1,pay2,pay3)=max(9,5,6)=9,在第二轮中,参与者的决策(DEC)为1(这是前一轮中的最大值)


在第三轮中,先前的_max=0,因为第二轮中的最大值为8(即“pay1”),但参与者选择“3”(即pay3)

这里有一个使用
dplyr
purr::map
的解决方案。 我宁愿使用
group\u by
而不是split,但是
max.col
忽略组,我不知道是否有
dplyr
等价物

输出略有不同,但我认为这是因为您的错误,请解释,如果不是,我会更新我的答案

library(purrr)
library(dplyr)

  gamematrix       %>%
    split(.$part)  %>%
    map(~ .x %>% mutate(
      prev_max = as.integer( 
        decs == 
        c(0,max.col(.[c("pay1","pay2","pay3")])[-n()]) # the number of the max columns, offset by one
      ))) %>%
    bind_rows

  # `  part game round pay1 pay2 pay3 decs prev_max
  # 1     1    1     1    9    5    6    2        0
  # 2     1    1     2    8    1    1    1        1
  # 3     1    1     3    3    5    5    3        0
  # 4     1    1     4    6    1    5    1        0
  # 5     1    1     5   10    3    8    3        0
  # 6     1    2     6   10    1    5    1        1
  # 7     1    2     7    1   10    7    3        0
  # 8     1    2     8    1   10    8    2        1
  # 9     1    2     9    4    1    5    1        0
  # 10    1    2    10    4    7    7    2        0
  # 11    2    1     1    8    4    1    1        0
  # 12    2    1     2    8    5    5    2        0
  # 13    2    1     3    1    9    3    1        1
  # 14    2    1     4    8    2   10    2        1
  # 15    2    1     5    2    6    2    3        1
  # 16    2    2     6    5    5    6    2        1
  # 17    2    2     7    4    5    1    2        0
  # 18    2    2     8    2   10    5    2        1
  # 19    2    2     9    3    7    3    2        1
  # 20    2    2    10    9    3    1    1        0

谢谢像魔术一样工作!如果希望输出如我的示例中所示,则应稍微更新代码:split(,,list(gamematrix$part,gamematrix$game))%>%
library(purrr)
library(dplyr)

  gamematrix       %>%
    split(.$part)  %>%
    map(~ .x %>% mutate(
      prev_max = as.integer( 
        decs == 
        c(0,max.col(.[c("pay1","pay2","pay3")])[-n()]) # the number of the max columns, offset by one
      ))) %>%
    bind_rows

  # `  part game round pay1 pay2 pay3 decs prev_max
  # 1     1    1     1    9    5    6    2        0
  # 2     1    1     2    8    1    1    1        1
  # 3     1    1     3    3    5    5    3        0
  # 4     1    1     4    6    1    5    1        0
  # 5     1    1     5   10    3    8    3        0
  # 6     1    2     6   10    1    5    1        1
  # 7     1    2     7    1   10    7    3        0
  # 8     1    2     8    1   10    8    2        1
  # 9     1    2     9    4    1    5    1        0
  # 10    1    2    10    4    7    7    2        0
  # 11    2    1     1    8    4    1    1        0
  # 12    2    1     2    8    5    5    2        0
  # 13    2    1     3    1    9    3    1        1
  # 14    2    1     4    8    2   10    2        1
  # 15    2    1     5    2    6    2    3        1
  # 16    2    2     6    5    5    6    2        1
  # 17    2    2     7    4    5    1    2        0
  # 18    2    2     8    2   10    5    2        1
  # 19    2    2     9    3    7    3    2        1
  # 20    2    2    10    9    3    1    1        0