让两个随机团队形成数据集并在 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
假设我有一支由 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