Почему 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
(опять же, несколько смущает здесь).