Как применить mutate ко всем строкам, кроме текущей - PullRequest
1 голос
/ 03 февраля 2020

У меня есть рейтинги для n ресторанов. Я хочу найти средний рейтинг для каждой n-1 комбинации

например,

store   rating

MCD     4
BK      5
CVS     2
DQ      2
WM      1
AAPL    5
MSFT    5

n = 7

Общая средняя оценка (4+5+2+2+1+5+5)/7

без MCD это (5+2+2+1+5+5)/6

Как мне найти все эти комбинации такие, что:

rating.without  avg.rating

MCD             (5+2+2+1+5+5)/6
BK              (4+2+2+1+5+5)/6
CVS             (4+5+2+1+5+5)/6
DQ              (4+5+2+1+5+5)/6
WM              (4+5+2+2+5+5)/6
AAPL            (4+5+2+2+1+5)/6
MSFT            (4+5+2+2+1+5)/6

tribble для удобства:

df <- tribble(
  ~store, ~rating,
  "MCD",  4,
  "BK",   5,
  "CVS",  2,
  "DQ",   2,
  "WM",   1,
  "AAPL", 5,
  "MSFT", 5
)

1 Ответ

4 голосов
/ 03 февраля 2020

Вы можете сделать:

df$avg.rating <- (sum(df$rating) - df$rating)/(nrow(df) - 1)
df
# A tibble: 7 x 3
#  store rating avg.rating
#  <chr>  <dbl>      <dbl>
#1 MCD        4       3.33
#2 BK         5       3.17
#3 CVS        2       3.67
#4 DQ         2       3.67
#5 WM         1       3.83
#6 AAP        5       3.17
#7 MSFT       5       3.17

Мы можем перевести то же самое в dplyr на

library(dplyr)
df %>% mutate(avg.rating = (sum(rating) - rating)/(n() - 1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...