2010-11-18 12 views
3

R Türleri, Turbidite sütunu başlığı altında negatif bir değere sahip bir veri çerçevesindeki (karıncalar) içindeki satırları silmeye çalışıyorum. Ben Satırları negatif değerlerle silme

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

denedi ancak aşağıdaki hata verir:

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

Herhangi fikirler neden bu olabilir? Belki tüm NA'ları silmeden önce negatif değerleri NA yapmam gerekiyor mu?

Herhangi bir fikir çok takdir, teşekkür ederim!

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

+1

Sanırım '' 'yazarken' ''. – Marek

+0

Evet, haklısınız, benim hatam, bence birçoğu! – Joey

+0

Özgün karıncalar $ Turbidity, yani dönüştürülmüş olanı kastetmedim. Burada verdiğiniz, bu hatayı veremez. Ama kendiniz belirttiğiniz gibi, 'header = T' kullanarak onu çözmek gibi görünüyor, bu yüzden rahatsız etmeyin. –

cevap

3

Marek haklı, bir veri problemi. Şimdi [as.numeric (karınca $ Bulanıklık] 'ı kullanırsanız, her zaman pozitif olacağından emin olun. Sayısal faktörleri değil, faktör seviyelerini (1 - uzunluk (karınca $ Türbidite)) verir

Bu:..

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

size değer ilk etapta sayısal değildi endeksleri listesini verecektir Bu, ilk verilerinizi temizlemek için size imkan vermelidir

örn:

> 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 

Sorunlu verileri dönüştürmek için as.numeric(as.character(...)) yapısını kullanmamalısınız, çünkü geri kalanıyla karışıklık yaratacak NA'lar üretecektir. Ör:

> Turbidity[tt > 5] 
[1] 6 7 8 9 <NA> 
Levels: 0 1 2 3 4 5 6 7 8 9 a 
+0

Teşekkürler Joris ve Marek. Bunu önerildiği gibi çalıştırdım ve gerçekten tüm satırlarım karakter olarak döndürülüyor, en azından hiçbiri sayısal olarak döndürülüyor. Şimdi, verilerimin tamamen yanlış biçimde olduğunu belirledim, bunları sayısal değerlere nasıl değiştirebileceğimi önerebilir misiniz yoksa bu kadar basit değil mi? Çok teşekkürler. – Joey

+0

@Joey: Yani bundan sonra (! Is.na (tt)) 1'den satır sayısına kadar bir liste aldığınız anlamına mı geliyor? Eğer öyleyse, sorunuza str (karınca $ Turbidity) 'ın çıktısını koyabilir misiniz? –

+0

str (karınca $ Bulanıklık) num [1: 291] 0 0 -0,1 -0,2 -0,2 -0,5 0,1 -0,4 0 -0,2 ... – Joey

0

DÜZENLEME: Sonuç

str(ants$Turbidity) 

num [291 1] 'dır. as.character dönüşümünü unuttum (bkz. Joris yorumu).


İleti ants$Turbidit bir factor olduğu anlamına gelir. Eğer

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

veya

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

yapınca çalışacaktır Ama asıl sorun, veri analizi için hazır olmamasıdır. Bu dönüşüm başlangıçta yapılmalıdır. Dikkatli olmalısınız çünkü sayısal olmayan değerler de olabilir.

+2

'olarak.sayısal 'sayısal değeri değil, faktör seviyelerini verecektir. Eğer as.numeric (as.character (karıncalar $ Turbidity)) kullanırsanız, 'NA' ile ilgili problemler alırsınız. –

+0

Teşekkür ederim, bu iyi çalışıyor, ben gerçekten her şeyi 0.0'dan büyük veya eşit tutmak istediğinizi anladım. Bu tür bir dönüşümün başlangıcında, başlangıçta ne yapılacağını söylediğinizde…? Maalesef, R için oldukça yeni ve en iyi uygulamalardan bazılarına alışkın değilim ... teşekkürler :) – Joey

+0

@Joris Açıkçası bir şey ama özledim. Teşekkürler. – Marek

3

daima verilerde okuduktan sonra summary(ants) yapmak ve nelerle olsun olmadığını kontrol edin.

Size birçok sorun yaşatacak. Sayısal veriler, karakter veya faktör türlerine göre sihirli dönüşüme eğilimlidir.

+0

Ah canım, artık veri sütunlarımın hiçbirinin (tüm sayısal) sayısal olarak içe aktarılmadığını görüyorum. Onları ithal ederken temel bir şeyi özlediğimi hissediyorum. Belirli sütunların Tarih, Saat veya sayısal olmasını istediğinizi nasıl belirtirim? – Joey

+0

@Spacedman: Dönüşümün büyüsü yok. Karakter veya faktör türlerine dönüştürülürse, ilk etapta verilerde bir sorun vardır. –

+0

@Joey: Dönüşüm, veri kümenizde sayısal olmayan karakterler bulunması gerçeğinden kaynaklanır. Mümkünse, R onları sayısallaştırırdı. Bu sayısal olmayan karakterleri kaldırmanız gerekir. –