2014-10-06 26 views
5

Verilerimi manipüle ediyordum ve işlemin bir noktasında yanlış bir şey yaptığımı fark ettim. Sorunu incelediğimde sorun, tidyr paketindeki spread() davranışının aşağı inmesine yol açtı.tidyr'deki spread(), faktör düzeylerini nasıl işler?

İşte örnek bir örnek. Aşağıdaki gibi bir veri çerçevemiz olduğunu söyleyelim.

> d <- data.frame(factor1 = rep(LETTERS[1:3], each = 3), 
+ factor2 = rep(paste0("level", c(1, 2, 10)), 3), 
+ num = 1:9 
+) 
> d 
    factor1 factor2 num 
1  A level1 1 
2  A level2 2 
3  A level10 3 
4  B level1 4 
5  B level2 5 
6  B level10 6 
7  C level1 7 
8  C level2 8 
9  C level10 9 

Yapmak istediğim, bu uzun formatlı veri çerçevesini geniş biçime dönüştürmekti. Ve ben de spread()'un gitmek için bir yol olduğunu düşündüm. Sonuç, beklediğim şey değildi. faktör1 "A" ve faktör2 "level2" ise

> spread(d, factor2, num) 
    factor1 level1 level2 level10 
1  A  1  3  2 
2  B  4  6  5 
3  C  7  9  8 

, 2 değeriyle olmalı, ama ortaya çıkan geniş formatlı num faktör2 alfabetik sıraya göre sıralanır, Görünüşe 3. diyor (düzeyi1> Seviye10 > level2) ve geniş biçime yerleştirilir. Ancak, olduğu durumda, factor2 etiketleri orijinal veri çerçevesinde göründükleri sırayla aynı kalır (level1> level2> level10). Bu neden olduğunu (ve/veya ilgili bilgileri nerede bulabileceğimi) açıklayabilir misiniz? sağlanan verileri kullanarak

+0

, colnames numaralarına karşılık gelen, ancak sütunların sırasının' düzeyi1, Seviye10, level2' olduğunu. Bu da d $ factor2 <- factor (d $ factor2, levels = c ('level1', 'level2', 'level10')); spread (d, factor2, num) ' – akrun

+0

' tidyr' sürüm 0.1 var ve kodunuzu kullanarak doğru sonucu aldım. Belki de R'yi yeniden başlatmalı ve bunun bir şeyi değiştirip değiştirmediğini görmelisiniz? –

+0

Gelişimsel sürümü kullanıyormuşum gibi görünüyor. Geçerli olanı CRAN'dan kurduğumda iyi çalıştı. Bunu işaret ettiğin için teşekkürler. –

cevap

8

, ben farklı bir sonuç var: `tidyr` ait geliştirme sürümünü kullanarak

> packageVersion("tidyr") 
[1] ‘0.1’ 
spread(d, factor2, num) 
    factor1 level1 level10 level2 
1  A  1  3  2 
2  B  4  6  5 
3  C  7  9  8 
+0

Gönderilmeden önce paketin sürümünü kontrol ettim ve 0.1'den beri en son sürüm olduğunu düşündüm. Ancak, @akrun'dan bahsedildiği gibi, github'dan indirdiğim gelişimsel versiyonu kullanıyordum. Paketi CRAN'dan yüklediğimde, doğru bir şekilde çalıştı. Teşekkürler! –

İlgili konular