在R中的行之间执行计算

问题描述 投票:2回答:1

我想弄清楚如何在(或)?行之间进行计算。我试过看了这个,但很明显我的谷歌今天并不强大,因为我只是找不到合适的搜索词。

这是我正在尝试处理的数据类型的超简化示例:

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风格的解决方案表示赞赏。

r dataframe tidyverse
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.