如何计算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