r - 在 R 中执行行之间的计算

标签 r dataframe tidyverse

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

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

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

最佳答案

好的,我们假设 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

关于r - 在 R 中执行行之间的计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54875227/

相关文章:

r - 如何防止 knitr 打印 ## 和矩阵索引/行号?

r - 在 R 中创建动态函数的错误

python - 计算每组前n行的总和

python - 如何从 Pandas 数据框的列值创建新行

r - 按每行中 NA 的数量拆分数据帧

从数据框中按组随机抽取 2 个独立的 100 个模拟

通过变量将数据从长格式改造成短格式,并重命名列

R 调用具有超过 2 个参数的中缀函数

R 减去基于类别的值和日期 tidyverse-way

r - 如何在复杂数据的情况下分离行