Почему spread() создает столбец только для NA?

Я все еще начинающий R, поэтому я надеюсь, что этот вопрос не является лишним, но я не смог найти удовлетворительный ответ на мою проблему. Хотя этот Вопрос кажется очень похожим, я все еще задаюсь вопросом, представляет ли мое наблюдение стандартный случай. Используя функцию tidyr::spread приводит к неловкому поведению, когда я пытаюсь распределить три уникальных наблюдения в одном столбце, которые содержат NA. В результате получается столбик с тремя новыми столбцами (как и ожидалось), а также с дополнительным четвертым столбцом с именем "NA", который полностью заполнен NA.

Вот мой пример dataframe:

test <- data.frame("Country" = c("A", "A", "A", "A", "A", "A", "A", "A"), 
                   "Column1" = c(1, 1, 1, 1, 1, 1, 2, 2), 
                   "Column2" = c(3, 3, 3, 4, 4, 4, 5, 5), 
                   "Column3" = c("B", "M", "F", "B", "M", "F", "B", NA), 
                   "Column4" = c(50, 74, 31, 53, 79, 33, 51, NA))

test1 <- spread(test, key = "Column3", value = "Column4")

test1

Это нормально, когда в моем файле отсутствуют пропущенные значения? И если так, то почему? Создание дополнительного столбца, полностью заполненного пропущенными значениями в качестве стандартного поведения, кажется мне странным. Или я что-то упускаю очевидное (наверное)?

Любая помощь приветствуется!

1 ответ

спред ведет себя как ожидалось, хотя повторное присутствие NA как имя столбца, так и значения в фреймах данных могут сделать поведение неясным. Давайте изменим фрейм данных, чтобы использовать фиктивное значение 999 в "Column4":

test <- data.frame("Country" = c("A", "A", "A", "A", "A", "A", "A", "A"), "Column1" = c(1, 1, 1, 1, 1, 1, 2, 2), "Column2" = c(3, 3, 3, 4, 4, 4, 5, 5), "Column3" = c("B", "M", "F", "B", "M", "F", "B", 'NA'), "Column4" = c(50, 74, 31, 53, 79, 33, 51, 999))

  Country Column1 Column2 Column3 Column4
1       A       1       3       B      50
2       A       1       3       M      74
3       A       1       3       F      31
4       A       1       4       B      53
5       A       1       4       M      79
6       A       1       4       F      33
7       A       2       5       B      51
8       A       2       5      NA     999

А теперь операция распространения:

test1 <- spread(test, key = "Column3", value = "Column4")

  Country Column1 Column2  B  F  M  NA
1       A       1       3 50 31 74  NA
2       A       1       4 53 33 79  NA
3       A       2       5 51 NA NA 999

спред правильно разместил 999 значение в новом столбце "NA" (опять же, новые имена столбцов взяты из старых значений в "Column3") и выровняли это значение с соответствующими значениями из исходного фрейма данных. Так как 999 появляется только один раз в исходном фрейме данных, у него есть только 1 подходящая строка в новом фрейме данных, и поэтому все остальные строки в новом столбце "NA" заполняются NA (опять же, несколько смущает здесь).

Другие вопросы по тегам