Я применяю функцию распространения из пакета 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`)