Разница «баллов» за два периода для каждого идентификатора - PullRequest
3 голосов
/ 22 апреля 2020

Я хочу, чтобы разница в «счет» для двух периодов для каждого идентификатора.

   id <- rep(1:3,each=2)
period <- rep(1:2,3)
score <- c(3,2,4,1,8,5)

df <- data.frame(id, period,score)
df
id period score
1      1     3
1      2     2
2      1     4
2      2     1
3      1     8
3      2     5

Я думал сначала сгруппировать по идентификатору, но затем я также должен сгруппировать по периодам, а затем суммировать по баллам. Как мне это сделать?

df %>% group_by(id) %>%

Это должно выглядеть так

 id score
     1     1
     2     3
     3     3  

Ответы [ 2 ]

2 голосов
/ 22 апреля 2020

Исходя из желаемого результата, вы хотите вычесть period2 из периода 1, я прав?

Если это так, я не думаю, что вы можете назвать это средним. Одним из возможных решений является:

library(dplyr)
library(tidyr)

df %>% pivot_wider(names_from = period, values_from = score) %>%
    mutate(Avg = `1` - `2`) %>% select(id, Avg)

Другая возможность - присвоить отрицательное число для оценки за период 2, а затем суммировать оценку для каждого идентификатора:

library(dplyr)

df %>% mutate(score = ifelse(period == 2, score*-1, score)) %>%
    group_by(id) %>% summarise(Score = sum(score))

# A tibble: 3 x 2
     id Score
  <int> <dbl>
1     1     1
2     2     3
3     3     3
2 голосов
/ 22 апреля 2020

Мы можем использовать diff после группировки по 'id'

library(dplyr)
df %>% 
    group_by(id) %>%
    summarise(score = abs(diff(score)))
# A tibble: 3 x 2
#     id score
#  <int> <dbl>
#1     1     1
#2     2     3
#3     3     3

или в base R с aggregate

aggregate(score ~ id, df, diff)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...