Создайте столбец на основе разницы 2 объектов в отдельном столбце в R - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть фрейм данных:

Team_num <- c("One","Two","Three", "One", "Two", "One", "Two", "Three")
Date <- c("08/09/2019","08/09/2019","08/09/2019","08/10/2019","08/10/2019","08/11/2019","08/11/2019","08/11/2019")
Score <- c(12,15,68,59,63,47,45,89)

df <- data.frame(Team_num, Date, Score)

, который выдает:

 Team_num       Date Score
1      One 08/09/2019    12
2      Two 08/09/2019    15
3    Three 08/09/2019    68
4      One 08/10/2019    59
5      Two 08/10/2019    63
6      One 08/11/2019    47
7      Two 08/11/2019    45
8    Three 08/11/2019    89

Я хотел бы создать новый столбец на основе различий в баллах каждой команды на основе их предыдущий записанный счет.

Не у каждой команды есть счет для каждой даты, поэтому важно основывать ее на предыдущем записанном счете.

результирующий df должен выглядеть следующим образом:

  Team_num       Date Score Difference
1      One 08/09/2019    12        N/A
2      Two 08/09/2019    15        N/A
3    Three 08/09/2019    68        N/A
4      One 08/10/2019    59         47
5      Two 08/10/2019    63         48
6      One 08/11/2019    47        -12
7      Two 08/11/2019    45        -18
8    Three 08/11/2019    89         21

Ответы [ 2 ]

1 голос
/ 10 февраля 2020

Базовое решение R с использованием ave

df <- within(df,Difference <- ave(Score,Team_num,FUN = function(v) c(NA,diff(v))))

, такое что

> df
  Team_num       Date Score Difference
1      One 08/09/2019    12         NA
2      Two 08/09/2019    15         NA
3    Three 08/09/2019    68         NA
4      One 08/10/2019    59         47
5      Two 08/10/2019    63         48
6      One 08/11/2019    47        -12
7      Two 08/11/2019    45        -18
8    Three 08/11/2019    89         21
0 голосов
/ 10 февраля 2020

После группировки по 'Team_num' мы можем взять разницу между текущим 'Счетом' с lag из 'Балла'

library(dplyr)
df %>%
    group_by(Team_num) %>% 
    mutate(Difference = Score - lag(Score)) 
    # or use diff
    # mutate(Difference = c(NA, diff(Score)))
# A tibble: 8 x 4
# Groups:   Team_num [3]
# Team_num Date       Score Difference
#  <fct>    <fct>      <dbl>      <dbl>
#1 One      08/09/2019    12         NA
#2 Two      08/09/2019    15         NA
#3 Three    08/09/2019    68         NA
#4 One      08/10/2019    59         47
#5 Two      08/10/2019    63         48
#6 One      08/11/2019    47        -12
#7 Two      08/11/2019    45        -18
#8 Three    08/11/2019    89         21
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...