我正试图弄清楚如何在行之间(或之间?)进行计算。我尝试过查找,但是显然我的Google-Fu今天并不强大,因为我只是找不到合适的搜索字词。
这是我要处理的数据类型的超级简化示例:
mydf <- data.frame(pair = rep(1,2),
participant = c("PartX", "PartY"),
goalsAtt = c(6, 3),
goalsScr = c(2, 3))
我们有关于参与者尝试了多少“目标”以及他们实际得分了多少的数据,可以说我想知道他们的“防御”能力。现在,基本上我想做的是mutate()
两个新列,分别称为…saved
和missed
,其中saved
是对方参与者尝试的目标减去目标由他们得分,missed
就是对方参与者得分的目标。因此,显然参与者X将保存0并错过3,而参与者Y将保存4并错过2。
现在显然这是一个愚蠢的简单示例,我将要处理6种不同的“目标”类型,并要处理2.5k对,但我只是想起从哪里开始。
这里是业余编码器和Tidyverse样式的解决方案。
答案 0 :(得分:2)
好的,所以我们假设pair
仅适用于2个团队。这是一个tidyverse
解决方案,其中我们首先为组内的位置设置索引号,然后为保存的目标减去。错过了一些类似的目标。
library(tidyverse)
mydf %>%
group_by(pair) %>%
mutate(id = row_number()) %>%
mutate(goalsSaved = if_else(id == 1,
lead(goalsAtt) - lead(goalsScr),
lag(goalsAtt) - lag(goalsScr))) %>%
mutate(goalsMissed = if_else(id == 1,
lead(goalsScr),
lag(goalsScr)))
# A tibble: 2 x 7
# Groups: pair [1]
pair participant goalsAtt goalsScr id goalsSaved goalsMissed
<dbl> <fct> <dbl> <dbl> <int> <dbl> <dbl>
1 1 PartX 6 2 1 0 3
2 1 PartY 3 3 2 4 2