#r #sapply
#r #sapply
Вопрос:
У меня есть фрейм данных с несколькими столбцами, которые я хочу сгруппировать в соответствии с их именами. Когда имена нескольких столбцов соответствуют одному и тому же шаблону, я хочу, чтобы они были сгруппированы в один столбец, и этот столбец является суммой группы.
colnames(dataframe)
[1] "Départements" "01...3" "01...4" "01...5" "02...6" "02...7" "02...8" "02...9" "02...10" "03...11"
[11] "03...12" "03...13" "04...14" "04...15" "05...16" "05...17" "05...18" "06...19" "06...20" "06...21"
Итак, я использую этот фрагмент кода, который отлично работает, когда каждый столбец числовой, хотя первый является символьным, и поэтому я обнаружил ошибку. Как я могу исключить первый столбец из кода?
#Сгруппируйте столбцы по patern, найдите шаблон и выполните цикл
patterns <- unique(substr(names(dataframe_2012), 1, 3))` #store patterns in a vector
dataframe <- sapply(patterns, function(xx) rowSums(dataframe[,grep(xx, names(dataframe)), drop=FALSE]))
#loop through
Это код ошибки, который я получаю
Ошибка в суммах строк(DEPTpolicedata_2012[, grep(xx, names(DEPTpolicedata_2012)): ‘x’ должен быть числовым
Комментарии:
1. Извините, код ошибки в соответствии с примером — это ошибка в rowSums(dataframe[, grep(xx, names (dataframe)), : ‘x’ должен быть числовым
2. Каковы типы данных каждого столбца в
dataframe
? Такое ощущение, что некоторые столбцы нечисловые.
Ответ №1:
Вы можете просто удалить первый столбец с помощью
patterns$Départements <- NULL
Комментарии:
1. Спасибо. Но это просто возвращает ошибку в шаблонах[, -1]: неверное количество измерений
2. Вы действительно правы… Это FALSE полностью, когда я сохраняю шаблоны в векторе. Однако в исходном df только первый столбец является символьным.
3. Я обновил ответ, поэтому вы можете удалить первый столбец.
4. Возможно, проблема заключается только в том, что векторный шаблон — это просто символьные значения. Он должен каким-то образом указывать, как получать числовые значения, кроме столбца 1