Dplyr "Выбрать" - Ошибка: найдено дублированное имя столбца

Я пытаюсь извлечь столбцы из DT в новый DT, используя select {dplyr}

extract_Data <- select(.data = master_merge, subjectID, activity_ID,
                           contains("mean\\(\\)"), contains("std\\(\\)"))

Есть 563 столбца, поэтому я прошу извлечь первый и второй столбцы (предмет, активность) и все остальные столбцы, где присутствует значение mean() или std().

Нет дубликатов столбцов, которые могут быть созданы здесь. настолько тупик, почему. Я пробовал все варианты выбора, но всегда Ошибка: Дублированное имя столбца.

Как я могу устранить эту проблему - я просмотрел все имена столбцов 563 и дубликатов нет.

Ответ 1

Корень проблемы - это недопустимые символы в именах исходных столбцов. Обсуждение в Ограничения имен переменных в R также относится к именам столбцов. Попробуйте использовать уникальные имена столбцов с допустимыми символами, используя make.names().

valid_column_names <- make.names(names=names(master_merge), unique=TRUE, allow_ = TRUE)
names(master_merge) <- valid_column_names

Ответ 2

Вот решение, которое я нашел:

data <- data[ , !duplicated(colnames(data))]

Это подмножество набора данных без всех дублированных столбцов.

Надеюсь, что это поможет.

Ответ 3

Дубликаты из фильтра соответствия могут вызывать ошибку "дублированного имени". Пример:

library(dplyr)
x <- data.frame(1, 2, 3)
names(x) <- c("a", "a", "b")

x %>%
  select(matches("b"))

Если вам не нужны эти столбцы, устраните их с помощью

x <- x[ !duplicated(names(x)) ]

Ответ 4

Не прямой ответ, но это поможет многим людям.

Для всех вас, студентов Coursera, сталкивающихся с этой проблемой с этим набором данных: есть дубликаты имен столбцов. Например, 'fBodyAccJerk-bandsEnergy() - 1,16' встречается дважды. Проверьте:

your_merged_data_with_column_names [400: 420]

Мне бы хотелось показать результат, но мой браузер не будет поддерживать кнопку "код", а не Ctrl-K, и слишком много данных для отступов вручную. Попробуйте этот код для себя и тщательно проверьте "Переменные не показаны"!

Я сейчас работаю над решением, возможно, используя приведенные выше ответы или форум курсов.

Ответ 5

Я был озадачен той же ошибкой. Избегайте использования select. Если meanStdcolumns - это список столбцов, содержащих средний или std (который вы можете использовать с помощью grep), то работает master_merge [, meanStdcolumns].

Ответ 6

Прежде чем назначить имена столбцов, отфильтруйте столбцы, получив список индексов, используя

meanStdColumns <- grep("mean|std", features$V2, value = FALSE)

а затем назначьте имена столбцов, используя

meanStdColumnsNames <- grep("mean|std", features$V2, value = TRUE)