之前比赛的反击

时间:2018-01-03 18:26:48

标签: r database dataframe counter

我已经找到很多关于计算表中值的材料,但我的目标没什么不同,我找不到任何来源。

这是我的数据

       ID_1     ID_2      Date        RESULT      
1      12       3     2011-12-21       0         
2      12       13    2011-12-22       0         
3      3        12    2011-12-22       1           
4      15       13    2011-12-23       0                 
5      12       13    2011-12-23       1                 
5      13       15    2011-12-23       1                  
6      3        12    2011-12-23       0            
7      12       13    2011-12-23       0        

TARGET

      ID_1     ID_2      Date        RESULT    H2H_ID1    H2H_ID2   
1      12       3     2011-12-21       0           0         0
2      12       13    2011-12-22       0           0         0
3      3        12    2011-12-22       1           1         0
4      15       13    2011-12-23       0           0         0       
5      12       13    2011-12-23       1           0         1       
5      13       15    2011-12-23       1           1         0        
6      3        12    2011-12-23       0           2         0  
7      12       13    2011-12-23       0           1         1     
...
and so on

RESULT中,0是由id2赢得的匹配,1是由id1赢得的。 我需要2列(h2h_id1h2h_id2)来计算之前由相同玩家(id1和id2)赢得的匹配,传统的头对头。

我会举个例子。第3行。 ID1=3ID2=12。 id 3和id 12之前匹配的行是row1,匹配的获胜者是id2result=0)。 因此,在第3行中,我想阅读1中的H2H_ID1。 在第6行中,相同的条件,2匹配相同的ID和相同的结果。

在另一篇文章中,对于类似的tastk,(column with previous result) 他们给了我这个代码,以便之前只找到1个匹配(并且没有总和),但也许可以提供帮助。

# emulate the original dataframe
ID_1 <- c(12,12,3,15,16,3)
ID_2<-c(3,13,12,13,17,15)
ids <- cbind(ID_1, ID_2) # IDs columns
x1 <- c(15, 50, 20, 30, 51, 60)
y2 <- c(10, 40, 30, 20, 53, 62)
vars <- cbind(x1, y2) # x&y columns

FindPreviousIDsPair <- function(id_matrix, i_of_row) {
shorten_matrix <- id_matrix[1:(i_of_row - 1),,drop = FALSE]
string_to_search_for <- id_matrix[i_of_row, ]
string_to_search_for_sorted <- 
    string_to_search_for[order(string_to_search_for)]
found_rows_boolean <- sapply(FUN = function(i) all(shorten_matrix[i, 
    order(shorten_matrix[i, ])] == 
    string_to_search_for_sorted), X = 1:(i_of_row - 1)) 
found_row_n <- ifelse(any(found_rows_boolean),
    max(which(found_rows_boolean)), NA_real_)
found_col_of_DI1 <- ifelse(any(found_rows_boolean), 
    match(string_to_search_for[1], shorten_matrix[found_row_n, ]), NA_real_)
found_col_of_DI2 <- ifelse(any(found_rows_boolean), 
    match(string_to_search_for[2], shorten_matrix[found_row_n, ]), NA_real_)    
return(c(found_row_n, found_col_of_DI1, found_col_of_DI2))
}

感谢您的帮助。

0 个答案:

没有答案