#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 = "")