Удалить строки с отрицательными значениями - PullRequest
3 голосов
/ 18 ноября 2010

В RI я пытаюсь удалить строки в кадре данных (муравьи), которые имеют отрицательное значение под заголовком столбца Мутность.Я пытался

ants<-ants[ants$Turbidity<0,]

, но он возвращает следующую ошибку:

Warning message:
In Ops.factor(ants$Turbidity, 0) : < not meaningful for factors

Любые идеи, почему это может быть?Возможно, мне нужно сделать отрицательные значения NA, прежде чем я затем удаляю все NA?

Любые идеи высоко ценятся, спасибо!

@ Joris: результат

str(ants$Turbidity)

num [1: 291] 0 0 -0,1 -0,2 -0,2 -0,5 0,1 -0,4 0 -0,2 ...

Ответы [ 4 ]

3 голосов
/ 18 ноября 2010

Марек прав, это проблема с данными. Теперь будьте осторожны, если вы используете [as.numeric (ants $ Turbidity], так как он всегда будет положительным. Он дает уровни факторов (от 1 до длины (ants $ Turbidity)), а не числовые факторы.

Попробуйте это:

tt <- as.numeric(as.character(ants$Turbidity))
which(!is.na(tt))

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

например:

> Turbidity <- factor(c(1,2,3,4,5,6,7,8,9,0,"a"))
> tt <- as.numeric(as.character(Turbidity))
Warning message:
NAs introduced by coercion 
> which(is.na(tt))
[1] 11

Вы не должны использовать структуру as.numeric(as.character(...)) для преобразования проблемных данных, так как она будет генерировать NA, которые будут мешать остальным. Например:

> Turbidity[tt > 5]
[1] 6    7    8    9    <NA>
Levels: 0 1 2 3 4 5 6 7 8 9 a
3 голосов
/ 18 ноября 2010

Всегда выполняйте summary(ants) после чтения данных и проверяйте, получаете ли вы то, что ожидаете.

Это избавит вас от множества проблем.Числовые данные подвержены магическому преобразованию в типы символов или факторов.

0 голосов
/ 21 января 2019

Это также должно работать с использованием tidyverse (при условии, что столбец является правильным типом данных).

ants %>% dplyr::filter(Turbidity >= 0)
0 голосов
/ 18 ноября 2010

EDIT .Я забыл о преобразовании as.character (см. Комментарий Joris).


Сообщение означает, что ants$Turbidit является factor.Это сработает, когда вы выполните

ants <- ants[as.numeric(as.character(ants$Turbidity)) > 0,]

или

ants <- subset(ants, as.character(as.numeric(Turbidity)) > 0)

Но реальная проблема заключается в том, что ваши данные не готовы к анализу.Такое преобразование должно быть сделано в начале.Вы должны быть осторожны, потому что могут быть и нечисловые значения.

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