mean () возвращая ошибку «аргумент не числовой или логический: возвращающий NA», но только для некоторых столбцов во фрейме данных? - PullRequest
0 голосов
/ 23 февраля 2019

Я довольно новичок в r, так что, может быть, это что-то очевидное, но я не уверен, что происходит.Я загружаю файл с кучей данных, которые затем разделяю на отдельные фреймы данных.Они выглядят примерно так:

      V3    V4    V5    V6    V7    V8    V9   V10   V11    V12    V13    V14
3  1.000     2     3     4     5     6 7.000 8.000 9.000 10.000 11.000 12.000
4  0.042 0.067 0.292 0.206 0.071 0.067 0.040 0.063 0.059  0.040  0.066  0.040
5  0.043 0.172 0.179 0.199 0.073 0.067 0.040 0.062 0.058  0.039  0.066  0.039
6  0.040 0.066  0.29 0.185 0.072 0.067 0.040 0.062 0.058  0.039  0.065  0.039
7  0.039 0.068 0.291 0.189 0.075 0.069 0.040 0.064 0.058  0.041  0.064  0.039
8  0.042 0.063 0.271 0.191  0.07 0.068 0.040 0.065 0.058  0.041  0.066  0.040
9  0.041 0.067 0.342 0.199 0.069 0.066 0.041 0.065 0.057  0.040  0.065  0.042
10 0.044 0.064 0.295 0.198 0.069 0.067 0.039 0.064 0.057  0.040  0.067  0.041
11 0.041 0.067  0.29 0.211 0.066 0.067 0.043 0.056 0.058  0.042  0.067  0.042

Я пытаюсь найти средства для строк 4-6 и 7-9 для каждого столбца.У меня есть каждый фрейм данных в списке под названием «пластины».Когда я использую строку:

plates[[1]][2:4, 7]

, я получаю вывод:

[1] 0.04 0.04 0.04

Если я включу в коде средство mean (), оно отлично работает для столбцов 7 и выше.Однако, когда я использовал тот же код для столбцов ниже 7, скажем, для столбца 2, я в итоге получил:

[1] 0.067 0.172 0.066
57 Levels:  0.063 0.064 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.08 0.081 0.082 0.083 0.084 0.085 ... PlateFormat

Я понятия не имею, что это за 57 уровней: вещь, но я предполагаю, что это мойпроблема.Мне нужно только среднее из трех чисел (0,067, 0,172, 0,066), но эти 57 возвращаемых уровней, похоже, приводят к тому, что mean () дает мне ошибку в названии.Любая помощь с этим будет принята с благодарностью.

1 Ответ

0 голосов
/ 23 февраля 2019

Где-то в этом столбце есть запись, которая не может быть преобразована в число, поэтому read.csv() (или что вы использовали) считывает данные как фактор .Это может быть опечатка (что-то такое же простое, как дополнительная десятичная точка или запятая), код пропущенного значения, например "?"

. Для преобразования можно использовать

numify <- function(x) as.numeric(as.character(x))
mydata[] <- lapply(mydata, numify)

грубой силой, но было бы лучше использовать

bad_vals <- function(x) {
    x[!is.na(x) & is.na(numify(x))   
}
lapply(mydata, bad_vals)

, чтобы определить плохие значения, чтобы вы могли исправить их в исходном файле (или добавить коды пропущенных значений в na.strings=).аргумент во входном коде)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...