Свертывание строк в одно значение - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть набор данных:

LOC     Store   Question        Rating

NYC     MCD     Food quality?       3
NYC     MCD     Water quality?      4
NYC     MCD     Cleanliness?        5

LA      BK      Food quality?       3
LA      BK      Water quality?      2   
LA      BK      Cleanliness?        5

SF      MCD     Food quality?       4
SF      MCD     Water quality?      5   
SF      MCD     Cleanliness?        4

, и я хотел бы свернуть вопросы в средний рейтинг для каждого магазина:

Loc Store   Avg.Rating
NYC MCD     (3+4+5)/3
LA  BK      (3+2+5)/3
SF  MCD     (4+5+4)/3

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

df <- 
tribble(
~LOC,   ~Store, ~Question,  ~Rating,
"NYC",  "MCD",  "Food?",        3,
"NYC",  "MCD",  "Water?",       4,
"NYC",  "MCD",  "Clean?",       5,
"LA",   "BK",   "Food?",        3,
"LA",   "BK",   "Water?",       2,  
"LA",   "BK",   "Clean?",       5,
"SF",   "MCD",  "Food?",        4,
"SF",   "MCD",  "Water?",       5,  
"SF",   "MCD",  "Clean?",       4
)

1 Ответ

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

Самый простой способ - использовать group_by и summaze из dplyr.

library("tibble")
library("dplyr")
library("magrittr")

df <- 
tribble(
~LOC,   ~Store, ~Question,  ~Rating,
"NYC",  "MCD",  "Food?",        3,
"NYC",  "MCD",  "Water?",       4,
"NYC",  "MCD",  "Clean?",       5,
"LA",   "BK",   "Food?",        3,
"LA",   "BK",   "Water?",       2,  
"LA",   "BK",   "Clean?",       5,
"SF",   "MCD",  "Food?",        4,
"SF",   "MCD",  "Water?",       5,  
"SF",   "MCD",  "Clean?",       4
)

store.avg <- group_by(df, LOC, Store) %>%
  summarize(Avg.Rating = mean(Rating))

# A tibble: 3 x 3
# Groups:   LOC [3]
  LOC   Store Avg.Rating
  <chr> <chr>      <dbl>
1 LA    BK          3.33
2 NYC   MCD         4   
3 SF    MCD         4.33
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...