2010-11-18 5 views
3

R에서 음수 값이있는 데이터 프레임 (개미)의 행을 Turbidity라는 제목 아래에 삭제하려고합니다. 나는 음수 값의 행 삭제

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

을 시도했지만 그것은 다음과 같은 오류 반환 :

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

모든 아이디어는 이유가 될 수 있습니까? 어쩌면 나는 모든 NA를 삭제하기 전에 음수 값을 NA로 만들 필요가 있습니까?

많은 의견을 보내 주시면 감사하겠습니다.

@Joris : 0 0 -0.1 -0.2 -0.5 -0.4 0 -0.2 0.1 -0.2 ...

+1

나는'>'을 쓸 때'>'을 의미한다고 생각합니다. – Marek

+0

네가 옳았다. 나의 실수는, 내가 생각하는 많은 것 중 하나이다! – Joey

+0

나는 원래 개미 $ 혼란, 변환 된 하나가 아니라 의미. 여기에 당신이주는 것은 그 오류를 줄 수 없습니다. 그러나 당신이 말했듯이,'header = T'를 사용하는 것은 그것을 해결하는 것처럼 보이므로 걱정하지 마십시오. –

답변

3

마렉이 맞습니다. 데이터 문제입니다. 이제는 [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

Joris와 Marek에게 감사드립니다. 제안 된대로 이것을 실행하고 실제로 모든 행이 문자로 반환됩니다. 적어도 숫자는 숫자로 반환되지 않습니다. 이제 데이터가 완전히 잘못된 형식이라는 것을 알았습니다. 숫자 값으로 변경하는 방법을 제안하거나 간단하지 않습니까? 많은 감사합니다. – 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

EDIT : 결과

str(ants$Turbidity) 

NUM의 [291 (1)]이다. as.character 변환을 잊어 버렸습니다 (Joris 주석 참조).


메시지 ants$Turbiditfactor 것을 의미한다. 당신이

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

또는

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

을 할 때 작동하지만 진짜 문제는 데이터가 분석 준비가되지 않은 것입니다. 이러한 전환은 처음에 이루어져야합니다. 숫자가 아닌 값도있을 수 있으므로주의해야합니다.

+2

'.숫자 '는 숫자 값이 아닌 요소 레벨을 제공합니다. 'as.numeric (as.character (ants $ Turbidity))'를 사용하면'NA'에 문제가 생길 것입니다. –

+0

고맙습니다.이 방법이 잘 작동합니다. 실제로 모든 것을 0.0 이상으로 유지하려고합니다. 이런 유형의 전환이 처음에 완료되어야한다고 말하면서 ... 시작 부분에서? 죄송합니다. 저는 R에 상당히 익숙하고 일부 우수 사례에 익숙하지 않았습니다 ... 감사합니다. :) – Joey

+0

@Joris 명백한 일이지만 그것을 놓쳤습니다. 고마워. – Marek

3

항상 데이터를 읽은 후 summary(ants)을, 당신은 당신이 기대하는 것을 얻을 수 있는지 확인하세요.

많은 문제를 줄일 수 있습니다. 숫자 데이터는 문자 또는 요인 유형으로의 마법 변환이 발생하기 쉽습니다.

+0

오, 이제 모든 데이터 열 (숫자)을 숫자로 가져 오지 못했습니다. 나는 그들을 가져올 때 근본적인 무언가를 놓쳤다. 특정 열을 날짜, 시간 또는 숫자로 지정하려면 어떻게 지정합니까? – Joey

+0

@ 스페이스 맨 : 변환에 마법은 없습니다. 그것이 문자 또는 요인 유형으로 변환되면, 처음에는 데이터에 문제가 있습니다. –

+0

@Joey : 데이터 집합에 숫자가 아닌 문자가 있기 때문에 변환이 발생했습니다. 그것이 가능하다면, R은 그것들을 숫자로 만들었을 것입니다. 숫자가 아닌 문자는 제거해야합니다. –