Повторение некоторых комментариев - важно предоставить воспроизводимый пример вашей проблемы / вопроса. Вот одно из возможных решений того, что вы пытаетесь сделать; используя пакет dplyr
.
library(dplyr)
set.seed(8675309)
player.names <- c("Jeff", "Stan", "Hadley", "Mary", "Helen", "Susan", "Mark", "Marcus", "Juan", "Pablo", "Aamir", "Geoff")
player.salaries <- 1:12 * 1000000
player.ab <- seq(1, 36, 3) * 100
player.obp <- runif(12, 0, 1)
player.df <- data.frame(name = player.names,
salary = player.salaries,
ab = player.ab,
obp = player.obp,
stringsAsFactors = FALSE)
player.combinations <- expand.grid(player1 = player.names,
player2 = player.names,
player3 = player.names,
stringsAsFactors = FALSE) %>%
mutate(p1.num = as.numeric(as.factor(player1)),
p2.num = as.numeric(as.factor(player2)),
p3.num = as.numeric(as.factor(player3))) %>%
## filter step ensures no duplicates or flipped orderings
filter(p1.num < p2.num, p2.num < p3.num) %>%
left_join(rename(player.df, p1.salary = salary, p1.ab=ab, p1.obp = obp),
by = c("player1"="name")) %>%
left_join(rename(player.df, p2.salary = salary, p2.ab=ab, p2.obp = obp),
by = c("player2"="name")) %>%
left_join(rename(player.df, p3.salary = salary, p3.ab=ab, p3.obp = obp),
by = c("player3"="name")) %>%
filter(p1.salary+p2.salary+p3.salary<=15000000,
p1.ab+p2.ab+p3.ab >= 1469,
(p1.obp+p2.obp+p3.obp)/3 >= 0.3638687)