2010-11-18 5 views
3

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

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

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

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

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

Любые идеи, очень ценные, спасибо!

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

str(ants$Turbidity) 

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

+1

Я думаю, вы имели в виду '>' при написании '<'. – Marek

+0

Да, вы совершенно правы, моя ошибка, одна из многих, я думаю! – Joey

+0

Я имел в виду оригинальных муравьев $ Мудрость, а не конвертированную. Тот, который вы здесь даете, не может дать эту ошибку. Но, как вы указали сами, использование 'header = T', похоже, решит его, так что не беспокойтесь. –

ответ

3

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

это:..

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 
+0

Спасибо, Джорис и Марек. Я выполнил это как предложение, и действительно все мои строки возвращаются как символ, по крайней мере, ни один не возвращается как числовой. Теперь я установил, что мои данные находятся в совершенно неправильном формате, можете ли вы предложить, как я могу изменить их на числовые значения или это не так просто? Большое спасибо. – Joey

+0

@Joey: Значит, вы имеете в виду, что после этого (! Is.na (tt)) вы получаете список от 1 до количества строк? Если да, можете ли вы поместить вывод 'str (ants $ Turbidity)' в свой вопрос? –

+0

str (муравьи $ Мутность) num [1: 291] 0 0 -0,1 -0,2 -0,2 -0,5 0,1 -0,4 0 -0,2 ... – Joey

0

РЕДАКТИРОВАТЬ. Я забыл о преобразовании as.character (см. Комментарий Джориса).


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

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

или

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

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

+2

'as.numeric' будет давать уровни факторов, а не числовое значение. Если вы используете 'as.numeric (as.character (ants $ Turbidity))', вы получите проблемы с 'NA'. –

+0

Спасибо, это хорошо работает, я понял, что хочу на самом деле хочу, чтобы все было больше или равно 0.0. Когда вы говорите, что такое преобразование должно быть сделано в начале ... в начале чего? Извините, я довольно новичок в R и не привык к какой-то лучшей практике ... спасибо :) – Joey

+0

@Joris Очевидная вещь, но я пропустил ее. Спасибо. – Marek

3

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

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

+0

О, боже, теперь я вижу, что ни один из моих столбцов данных (все числовые) не импортирован как числовой. Я чувствую, что упустил что-то принципиальное при импорте. Как указать, что я хочу, чтобы определенные столбцы были либо Date, Time или numeric, пожалуйста? – Joey

+0

@Spacedman: для преобразования нет ничего волшебного. Если он преобразуется в характер или типы факторов, в первую очередь возникает проблема с данными. –

+0

@Joey: преобразование связано с тем, что в вашем наборе данных есть нечисловые символы. Если бы это было возможно, R сделал бы их числовыми. Вы должны удалить эти нечисловые символы. –

Смежные вопросы