Почему функция спреда в R добавляет NA к моему сгруппированному и суммированному фрейму данных? - PullRequest
0 голосов
/ 05 сентября 2018

Я применяю функцию распространения из пакета tidyr к сгруппированному набору данных. Ниже приведен пример моих реальных данных. Я могу суммировать данные, используя group_by и функцию суммирования в dplyr, которая выдает небольшой фрейм данных без NA. Однако, если я переформатирую фрейм данных, используя разброс, у ячеек, которые когда-то не имели NA, внезапно появляются NA. Сначала я попытался разгруппироваться, но это не помогло.

Я, должно быть, упускаю что-то действительно простое.

В приведенном ниже коде table.ratings не будет иметь NA, но new.table имеет.

# Sample data
year <- c(0,0,0,0,1,1,1,1,2,2,2,2,
          0,0,0,0,1,1,1,1,2,2,2,2)
question <- c('a','b','c','d','a','b','c','d','a','b','c','d',
              'a','b','c','d','a','b','c','d','a','b','c','d')
rating <- c(3.22, 4.33, 2.33, 2.33, NA, 3.00, 
           2.33, 3.00, 5.00, 3.67, 4.33, NA,
           5.00, 4.10, 3.67, 2.82, 5.00, 5.00, 
           2.33, 3.00, 2.33, 5.00, 2.33, 3.00)
version <- c(1,2,1,2,1,2,1,2,1,2,1,2,
             1,2,1,2,1,2,1,2,1,2,1,2)

df <- data.frame(year, version, question, rating)

# Grouped dataframe with no NAs
table.ratings <- df %>%
  select(year, question, rating, version) %>%
  group_by(year, version, question) %>%
  dplyr::summarise(count = n(), 
        `Average Score` = mean(rating, na.rm = TRUE))

# This simply moves the cells around but results in NAs
new.table <- spread(table.ratings, key = "question", 
                    value = `Average Score`)
...