在R中的行之间执行计算

时间:2019-02-25 21:52:49

标签: r dataframe tidyverse

我正试图弄清楚如何在行之间(或之间?)进行计算。我尝试过查找,但是显然我的Google-Fu今天并不强大,因为我只是找不到合适的搜索字词。

这是我要处理的数据类型的超级简化示例:

mydf <- data.frame(pair = rep(1,2), 
                   participant = c("PartX", "PartY"), 
                   goalsAtt = c(6, 3), 
                   goalsScr = c(2, 3))

我们有关于参与者尝试了多少“目标”以及他们实际得分了多少的数据,可以说我想知道他们的“防御”能力。现在,基本上我想做的是mutate()两个新列,分别称为…savedmissed,其中saved是对方参与者尝试的目标减去目标由他们得分,missed就是对方参与者得分的目标。因此,显然参与者X将保存0并错过3,而参与者Y将保存4并错过2。

现在显然这是一个愚蠢的简单示例,我将要处理6种不同的“目标”类型,并要处理2.5k对,但我只是想起从哪里开始。

这里是业余编码器和Tidyverse样式的解决方案。

1 个答案:

答案 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