Аргумент не является числовым или логическим: возвращение NA с одним строковым столбцом - PullRequest
0 голосов
/ 23 октября 2019

Здравствуйте. Я хотел бы рассчитать среднее значение для каждого числового столбца в моих данных. На данный момент у меня есть:

for(i in names(MyData)){
  avg <- mean(MyData[[i]], na.rm = TRUE)
  print(avg)
}

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

1 Ответ

0 голосов
/ 23 октября 2019

Мы можем сделать это проще, если мы используем summarise_if из dplyr

library(dplyr)
MyData %>%
     summarise_if(is.numeric, mean)

В коде ОП он циклически перебирает все столбцы и просто printрезультат и не хранить его. Также возможно, что некоторые столбцы не являются numeric. В приведенном ниже коде мы предварительно присваиваем vector ('v1') с 0 значениями для хранения вывода. Создайте логическое условие с помощью if/else и верните mean, если оно равно numeric или else return NA

v1 <- numeric(length(MyData))
for(i in seq_along(MyData)) {
    if(is.numeric(MyData[[i]])) {
        v1[i] <- mean(MyData[[i]], na.rm = TRUE)
    } else {
        v1[i] <- NA_real_
     }
  }

В base R, это также можно сделатьс sapply

i1 <- sapply(MyData, is.numeric)
sapply(MyData[i1], mean, na.rm = TRUE)

или с colMeans

colMeans(MyData[i], na.rm = TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...