Управление данными в R

#r #data-manipulation #tidyr

#r #манипулирование данными #tidyr

Вопрос:

Итак, у меня есть этот код, в котором я пытаюсь объединить отдельные столбцы с именем grade prek-12 в один столбец с именем Grade . Я использовал tidyr пакет и использовал эту строку кода для выполнения указанной задачи:

 unite(dta, "Grade",
          c(Gradeprek, 
            dta$Gradek, dta$Grade1, dta$Grade2,
            dta$Grade3, dta$Grade4, dta$Grade5,
            dta$Grade6, dta$Grade7, dta$Grade8,
            dta$Grade9, dta$Grade10, dta$Grade11,
            dta$Grade12),
      sep="")
  

Однако я получаю сообщение об ошибке, в котором говорится следующее:

ошибка: все входные данные select() должны быть преобразованы в целочисленные позиции столбца. Следующее не выполняется: * c(Gradeprek, dta $ Gradek, dta $ Grade1, dta $ Grade2, dta $ Grade3, dta $ Grade4, dta $ Grade5, dta $ Grade6, …

Пенни за ваши мысли о том, как я могу разрешить ситуацию.

Комментарии:

1. На какой фрейм данных ссылается Gradeprek?

2. dta, извините, я забыл отключить это

Ответ №1:

Вы смешиваете и сопоставляете два варианта синтаксиса для unite и unite_ — вам нужно выбрать один и придерживаться его. В обоих случаях не используйте data$column — они принимают аргумент data, поэтому вам не нужно повторно указывать, из какого фрейма данных берутся ваши столбцы.

Вариант 1: NSE Нестандартная оценка по умолчанию означает голые имена столбцов — без кавычек! И нет c() .

 unite(dta, Grade, Gradeprek, Gradek, Grade1, Grade2, Grade3, ..., 
    Grade12, sep = "")
  

С этим можно проделать несколько хитростей. Например, если все ваши Grade столбцы расположены в таком порядке рядом друг с другом в вашем фрейме данных, вы могли бы сделать

 unite(dta, Grade, Gradeprek:Grade12, sep = "")
  

Вы также могли бы использовать starts_with("Grade") для получения всех столбцов, которые начинаются с этой строки. Смотрите ?unite и ссылку на ?select для получения более подробной информации.

Вариант 2: Стандартная оценка, которую вы можете использовать unite_() для альтернативы стандартной оценки, которая будет ожидать имена столбцов в символьном векторе. В данном случае преимущество этого заключается в том, что вы можете использовать paste() для построения имен столбцов в нужном вам порядке:

 unite_(dta, col = "Grade", c("Gradeprek", "Gradek", paste0("Grade", 1:12)), sep = "")