我想弄清楚如何在(或)?行之间进行计算。我试过看了这个,但很明显我的谷歌今天并不强大,因为我只是找不到合适的搜索词。
这是我正在尝试处理的数据类型的超简化示例:
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风格的解决方案表示赞赏。
好吧,让我们假设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