我有这些列的数据:目标值、目标反数和得分。在一个观察中,scorers列中的细胞可能有多个得分者,例如:“TammyAbraham(34),Zaniolo (90)”。在每一场比赛中,我应该如何计算每一位得分手的进球?为了说明:
#create reprex to ask about goalscorer tally
gf <- c(5,4,0,0,1)
ga <- c(3,3,0,2,0)
scorer <- c("a,b,c,d,e","a,b,c,d", NA, NA,"e")
dat <- data.frame(gf,ga,scorer)这就是示例的样子:
gf ga scorer
1 5 3 a,b,c,d,e
2 4 3 a,b,c,d
3 0 0 <NA>
4 0 2 <NA>
5 1 0 e有人能帮忙吗?还有,这足够了吗?
我只把进球和进球放在例子中,但在实际数据中,有更多的观察,如阵形、天气、比赛等。可以说,在4-4-2阵型的低得分比赛中,射手a往往得分较低吗?差不多吧。但问题是,得分手A和其他得分手一起在得分手栏中被发现。
发布于 2022-02-14 17:10:54
有潮流的方法。您可能需要将strsplit scorer字符串添加到列表中,然后将列表unnest:
library(dplyr)
library(tidyr)
dat |>
mutate(scorer = strsplit(scorer, ",")) |>
unnest(cols = c(scorer))
# A tibble: 12 × 3
gf ga scorer
<dbl> <dbl> <chr>
1 5 3 a
2 5 3 b
3 5 3 c
4 5 3 d
5 5 3 e
6 4 3 a
7 4 3 b
8 4 3 c
9 4 3 d
10 0 0 NA
11 0 2 NA
12 1 0 e 发布于 2022-02-14 17:39:58
计算每名得分手和比赛的进球数:
library(dplyr)
library(tidyr)
dat %>%
# make match ID:
mutate(match_ID = row_number()) %>%
# split `scorer`:
separate_rows(scorer) %>%
# remove rows where `scorer` is `NA`:
filter(!is.na(scorer)) %>%
# group by:
group_by(match_ID,scorer) %>%
# count number of goals per match:
summarise(N_goals = n())
# A tibble: 10 × 3
# Groups: match_ID [3]
match_ID scorer N_goals
<int> <chr> <int>
1 1 a 1
2 1 b 1
3 1 c 1
4 1 d 1
5 1 e 1
6 2 a 1
7 2 b 1
8 2 c 1
9 2 d 1
10 5 e 1https://stackoverflow.com/questions/71115167
复制相似问题