让两个随机团队形成数据集并在 R 中获得整体团队分数

Make two random teams form dataset and get overall team score in R

假设我有一支由 10 名球员组成的足球队(球员),我应该从中组成两个小组,每个小组有 5 名球员,然后计算每支球队的总分。

players <- read.table(text=
"paul    3
ringo   3
george  5
john    5
mick    1
ron     2
charlie 3
ozzy    5
keith   3
brian   3", as.is=TRUE)

我已经随机抽取了 5 名玩家:

t1 <- sample(players$V1, size = 5)

但是关于创建第二支球队(不包括第一支球队的球员)和计算两支球队的总分我已经完成了。

您可以尝试对球员的指数进行抽样来构建一线队,而不是对姓名进行抽样。

idx1 <- sample(1:nrow(players), 5)

您实际上可以使用这些索引来获取有关每个团队的所有信息:

team1 <- players[idx1,]
team2 <- players[-idx1,]

每个团队的分数可以用 sum(team1$V2)sum(team2$V2) 来计算。

首先随机得到一个订单。

> k <- sample(nrow(players))

然后为了得到每个队的名字,把名单按那个顺序放在两列中。

> matrix(players$V1[k], ncol=2)
##     [,1]    [,2]     
## [1,] "keith" "charlie"
## [2,] "paul"  "john"   
## [3,] "ron"   "brian"  
## [4,] "mick"  "george" 
## [5,] "ozzy"  "ringo"  

要获得总数,对分数执行相同的操作并计算列总和。

> colSums(matrix(players$V2[k], ncol=2))
## [1] 14 19

使用 data.table,你可以这样做:

library(data.table)
##
(data.table(data)[
  ,team := sample(1:.N,.N) %% 2][
    ,list(
      score = sum(V2)), 
    by=team])
#      team  score
# 1:    0    14
# 2:    1    19

一个人的团队取决于他们随机抽取的是偶数还是奇数。


或者,如果您想查看分配给每支球队的球员,

(data.table(data)[
  ,team := sample(1:.N,.N) %% 2][
    ,list(
      score = sum(V2),
      players = V1), 
    by=team])
#      team  score  players
# 1:    0    17     paul
# 2:    0    17     john
# 3:    0    17     mick
# 4:    0    17     ozzy
# 5:    0    17     brian
# 6:    1    16     ringo
# 7:    1    16     george
# 8:    1    16     ron
# 9:    1    16     charlie
# 10:   1    16     keith