2016-04-06 18 views
1

olarak karakterini depolamak sonra Likert Ölçekli ürün 0-4 kodlu olması df. Bunları ham dosyadan R'ye aktardıktan sonra, karakter olarak saklandılar. Daha sonra her değişkenin bir karakter olup olmadığını belirten boolean ile bir liste oluşturdum ve sonra bunu faktöre dönüştürmek için lapply kullandı.Yanlış seviyeleri benim dataframe olarak faktör

(tümü orijinal 0-4 olarak kodlanmıştır) artık faktör değişkenlerden bazıları bakarak
i <- sapply(df, is.character) 
df[i] <- lapply(df[i], as.factor) 

, alıyorum:

df$reactance1 
[1] 3 3 4 3  2 4 1 4 3 3 1 1 4 3 4 3 4 4 
Levels: 1 2 3 4 3 4 

veya

df$EAI4 
[1] 0 0 2 1  2 0 3 4 1 3 0 0 0 0 0 0 1 0 
Levels: 0 1 2 3 4 0 1 2 

Ben çözmeye çalıştı droplevels ile ilgili sorun()

Benim sanırım R, bir nedenden ötürü, bir karakter 3'ün başka bir karakter 3'ten farklı olduğunu düşünür, ancak aynı şekilde tedavi edilmeleri gerekir. Bu çok fazla seviyeye yol açar. Ham verilerimi, bazı sayıların önünde boşlukların olup olmadığını kontrol ettim, ama öyle görünmüyor.

Yardımlarınız için şimdiden teşekkür ederiz!

+1

/gecikmeli boşluk yani '" 3 ''veya'' 3 ''veya' lider için 'karakteri' sütunları kontrol' 3" ', üç durumda tüm farklı seviyeleri olacaktır Faktöre dönüştürdüğünüzde. – akrun

+0

Teşekkürler. as.data.frame (apply (df, 2, function (x) gsub ('\\ s +', '', x))) çözüldü – Dirk

+0

Kafam karıştı ... Bunlar ham dosyada nasıl saklandı? Sayı veya karakter olarak mı? Çünkü onlar sayı olarak depolanmışlar, ancak R onları karakter olarak okurlarsa, ithal kodunuzdaki bazı parametreleri değiştirmek isteyebilirsiniz. Ben sayısal karakteri değiştirmeye çalışırsanız – Laterow

cevap

1

Bu, 'karakter' sütunlarında leading/lagging boşluğu olabilir. Bu boşlukları, class sütununun character olması ve factor veya else'a dönüştürmesi durumunda bu boşlukları trimws (base R işlev) ile kaldırabiliriz. Bu durumda

df[] <- lapply(df, function(x) if(is.character(x)){ 
       factor(trimws(x)) 
       } else x 
     )