Почему ключи не распределены по нескольким столбцам? - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь распределить значения ключа столбца «Тип» по нескольким столбцам. Фрейм данных (dat_weighted) выглядит следующим образом:

  AreaName             Type index_disagg_standard index Category
1 Barking and Dagenham MRF  0.3329420             0.518 Average
2 Barking and Dagenham SDH  0.5286273             0.518 Average
3 Barking and Dagenham HO   0.7096024             0.518 Average
4 Barnet               MRF  0.8639524             0.750 Average
5 Barnet               SDH  0.3641302             0.750 Average
6 Barnet               HO   0.8493885             0.750 Average
7 Barnsley             MRF  0.5628280             0.610 Average
8 Barnsley             SDH  0.801927              0.610 Average
9 Barnsley             HO   0.4823344             0.610 Average

Код, который я пробовал, выглядит следующим образом:

dat_index <- dat_weighted %>%
  distinct(AreaName, .keep_all = TRUE) %>%
  arrange(index) %>%
  spread(key = Type, value = index_disagg_standard)

Но это только дает мне это:

  AreaName             MRF         index
1 Barking and Dagenham 0.33294203  0.518
2 Barnet               0.86395241  0.750
3 Barnsley             0.56282804  0.610

и я бы ожидал что-то вроде этого:

  AreaName             MRF         SDH       OH        index
1 Barking and Dagenham 0.33294203  0.5286273 0.7096024 0.518
2 Barnet               0.86395241  0.3641302 0.8493885 0.750    
3 Barnsley             0.56282804  0.801927  0.4823344 0.610

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Нам просто нужно удалить столбец «Категория», и он должен нормально работать

library(tidyverse)
dat_weighted  %>% 
     select(-Category) %>% 
     spread(Type, index_disagg_standard)
#             AreaName index        HO       MRF       SDH
#1 Barking and Dagenham 0.518 0.7096024 0.3329420 0.5286273
#2               Barnet 0.750 0.8493885 0.8639524 0.3641302
#3             Barnsley 0.610 0.4823344 0.5628280 0.8019270

данные

dat_weighted <- structure(list(AreaName = c("Barking and Dagenham", 
     "Barking and Dagenham", 
"Barking and Dagenham", "Barnet", "Barnet", "Barnet", "Barnsley", 
"Barnsley", "Barnsley"), Type = c("MRF", "SDH", "HO", "MRF", 
"SDH", "HO", "MRF", "SDH", "HO"), index_disagg_standard = c(0.332942, 
0.5286273, 0.7096024, 0.8639524, 0.3641302, 0.8493885, 0.562828, 
0.801927, 0.4823344), index = c(0.518, 0.518, 0.518, 0.75, 0.75, 
0.75, 0.61, 0.61, 0.61), Category = c("Average", "Average", "Average", 
"Average", "Average", "Average", "Average", "Average", "Average"
)), class = "data.frame", row.names = c("1", "2", "3", "4", "5", 
"6", "7", "8", "9"))
0 голосов
/ 01 апреля 2019

Чтобы получить ожидаемый результат, мы можем сделать

library(dplyr)
library(tidyr)

df %>%
  select(-Category) %>%
  gather(key, value, -c(AreaName, Type, index)) %>%
  spread(Type, value) %>%
  select(-key)

#             AreaName index        HO       MRF       SDH
#1 Barking_and_Dagenham 0.518 0.7096024 0.3329420 0.5286273
#2               Barnet 0.750 0.8493885 0.8639524 0.3641302
#3             Barnsley 0.610 0.4823344 0.5628280 0.8019270
...