Excellent job providing example data and a desired result. This code works on the example you provided. Hope it helps.
Jean # reshape the info data frame library(tidyr) info2 <- gather(myinfo, set, val, -game) info2$set <- as.numeric(gsub("[[:alpha:]]", "", info2$set)) # add a new column to the x data frame y <- t(x[,grep("char", names(x))]) newx <- x newx$char <- row(y)[y==1] # merge and define winner res <- merge(newx, info2) res$winner <- with(res, ifelse(char==val, 1, 0)) res On Wed, Dec 23, 2015 at 3:35 PM, Dimitri Liakhovitski < dimitri.liakhovit...@gmail.com> wrote: > Merry upcoming Christmas - for those of us who celebrate it! > > # I have data frame x. > x <- data.frame(game = c(rep(1, 4), rep(2, 4)), set = rep(c(1,1,2,2), > 2), player = rep(1:2, 4), > char1 = c(1,0,0,0,0,0,0,1), char2 = > c(0,0,1,0,0,1,0,0), char3 = c(0,1,0,1,0,0,0,0), > char4 = c(0,0,0,0,1,0,1,0)) > x > # There are several games (2 here). Each game has several sets (2 > here. In each set participate > # several players (2 here). > # Each player possesses 1 or 4 possible characteristics. > # For example, in game 1, set 1, player 1 has characteristic 1 and player > 2 - > # characteristic 3 > > # I also have data frame myinfo: > (myinfo <- data.frame(game = 1:2, set1 = c(3, 4), set2 = c(2, 1))) > # It tells me: > # in game 1, set 1 the winner was the player with characteristic 3 > # in game 1, set 2 the winner was the player with characteristic 2, etc. > > # I need to merge the 2 to produce the result below. > # I just need an additional column that - for each game and each set - > # has a 1 in the row of the player who had the winning characteristic > # (as per myinfo) and has a 0 otherwise. > > result <- x > result$winner <- c(0, 1, 1, 0, 1, 0, 0, 1) > result > > # I have written a long loop that loops through each set of each game, > identifies > # which characteristic wins in myinfo, and puts a 1 against the winning > row. > # But it's taking forever. Could it be done faster? Thanks a lot! > > # Important: In my real game the number of players could be more than > 2 and so can > # the number of games and the number of sets per game. > # However, we can assume that the number of sets per game is always the > same, > # and the number of players per set is always the same. > > > -- > Dimitri Liakhovitski > > ______________________________________________ > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.