Как правильно применять RowMeans ()?Ошибка "X не числовой" - PullRequest
0 голосов
/ 15 марта 2019

У меня есть два столбца в пределах OtherIncludedClean, и я хотел бы добавить еще один столбец OtherIncludedClean$Mean; однако мои усилия напрасны.

Я пробовал:

OtherIncludedClean$mean <- rowMeans(OtherIncludedClean, na.rm = FALSE, dims = 1) 

Но вышеприведенное сообщает об ошибке:

"Ошибка в base :: rowMeans (x, na.rm = na.rm, dims = dims, ...): 'x' должно быть числовым "

Я также попытался: OtherIncludedClean$mean <- apply(OtherIncludedClean, 1, function(x) { mean(x, na.rm=TRUE) })

Который сообщает об этой ошибке:

"1: в среднем. По умолчанию (X [[i]], ...): Аргумент не является числовым или логическим: возвращает NA "

Для всех 141 строк.

Любая помощь приветствуется. Спасибо .

Мои столбцы: "X__1" и "X__2"

1 Ответ

0 голосов
/ 15 марта 2019

Когда мы получаем ошибку 'x' must be numeric", лучше проверить типы столбцов. Более простой вариант -

str(OtherIncludedClean)

Если мы обнаружим, что типы не numeric/integer и это character/factor, нам нужно преобразовать его в тип numeric (при условии, что большинство значений являются числовыми в столбце и из-за одного или двух элементов который не является числовым, он меняет тип).

Способ конвертации as.numeric. Для одного столбца: as.numeric(data$columnname), если это character класс, а для factor класс,

as.numeric(as.character(data$columnname))

Здесь нам нужно изменить все столбцы на numeric (при условии, что это character класс). Для этого выполните цикл по столбцам с lapply и присвойте вывод обратно набору данных

OtherIncludedClean[] <- lapplyOtherIncludedClean, as.numeric)

, а затем применить rowMeans

Если класс только подмножества столбцов равен character, то нам нужно только выполнить цикл по этим столбцам

i1 <- !sapply(OtherIncludedClean, is.numeric)
OtherIncludedClean[i1] <- lapplyOtherIncludedClean[i1], as.numeric)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...