2016-01-08 21 views
5

ben aşağıdaki tabloyu nasıl değiştirebilirim: Bu tablonasıl düzgün tidyr içinde yayılması işlevini kullanmak

Type Name Answer  n 
TypeA Apple Yes  5 
TypeA Apple No  10 
TypeA Apple DK   8 
TypeA Apple NA   20 
TypeA Orange Yes  6 
TypeA Orange No  11 
TypeA Orange DK   8 
TypeA Orange NA   23 

Değişim için df_1 denir :

Type Name Yes No DK NA 
TypeA Apple 5  10 8 20 
TypeA Orange 6  11 8 23 

ben için aşağıdaki kodları kullanılır ilk tabloyu al.

df_1 <- 
    df %>% 
    group_by(Type, Name, Answer) %>% 
    tally() 

Sonra 2 tabloya almak için yayılma komutunu kullanmaya çalıştı, ancak aşağıdaki hata iletisi aldım: "Hata: Tüm sütunlar adlandırılmış olması gerekir"

df_2 <- spread(df_1, Answer) 

cevap

3

Sadece tidyr düşünüyorum df_1'dan df_2'a ulaşmak için gereklidir.

library(magrittr) 
df_1 <- read.csv(text="Type,Name,Answer,n\nTypeA,Apple,Yes,5\nTypeA,Apple,No,10\nTypeA,Apple,DK,8\nTypeA,Apple,NA,20\nTypeA,Orange,Yes,6\nTypeA,Orange,No,11\nTypeA,Orange,DK,8\nTypeA,Orange,NA,23", stringsAsFactors=F) 

df_2 <- df_1 %>% 
    tidyr::spread(key=Answer, value=n) 

Çıktı

: ayk gelen yorumum ardından

Type Name DK No Yes NA 
1 TypeA Apple 8 10 5 20 
2 TypeA Orange 8 11 6 23 
+0

Bu yöntem, yukarıda gösterilen kodda çalışır. Bununla birlikte, ilk tablodaki n sütunu (yani, df_1) tally fonksiyonu kullanılarak sistem oluşturulduğunda. Bu yöntem çalışmıyor. Hala bana hata veriyor: Tüm sütunlar adlandırılmalıdır. Talon kullanarak n sütunu oluşturmak için kullandığım kod yukarıda listelenmiştir. Yayılma, bu durumda n sütunu tanımıyor gibi görünüyor. Başka önerileriniz var mı? – ayk

+0

Fikir 1: dldr :: ungroup() öğesini "df_1" oluşturulduktan sonra kullanın. – wibeasley

+0

Fikir 2: "as.data.frame()' ile döküm. Fikir 3: dput() ile çıktılar, böylece yapıyı daha iyi görebiliriz. http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example. Aksi takdirde, df_1’i nasıl bulduğunuzu görmek zordur. – wibeasley

4

, ben bir örnek sağlıyorum. NA değerleri olan bir faktör veya karakter sınıfının bir sütununa sahip bir data_frame'iniz olduğunda bana benziyor, bu onları kaldırmadan ya da verileri yeniden sınıflandırmadan yayılamaz. Bu bir data_frame'e özgüdür (bir tane data.frame'de NA değerlerine sahip olduğunuzda benim örneğimde bu şekilde çalıştığından, (adda alt çizgi ile birlikte dplyr sınıfını not edin). Örneğin, yukarıdaki örnekte biraz değiştirilmiş versiyonu: bunu çeki düzen çalıştığınızda İşte

, O zaman bu

Source: local data frame [4 x 3] 

    Type Answer  n 
    (chr) (chr) (int) 
1 TypeA Yes  1 
2 TypeA  No  2 
3 TypeB  NA  3 
4 TypeB  No  4 

gibi görünen bir data_frame verir Hangi dataframe

library(dplyr) 
library(tidyr) 
df_1 <- data_frame(Type = c("TypeA", "TypeA", "TypeB", "TypeB"), 
        Answer = c("Yes", "No", NA, "No"), 
        n = 1:4) 
df_1 

olduğunu

df_1 %>% spread(key=Answer, value=n) 
Error: All columns must be named 

Ama kaldırırsanız NA adlı o zaman 'çalışır': biz bir hata mesajıBununla birlikte, NA'ları kaldırmak, istenen sonucu vermeyebilir: yani, bunların, düzeltilmiş tablonuza dahil edilmesini isteyebilirsiniz. NA'ları daha açıklayıcı bir değere değiştirmek için verileri doğrudan değiştirebilirsiniz. Alternatif olarak, verilerinizi bir data.frame olarak değiştirebilir ve daha sonra çok iyi yayılır:

as.data.frame(df_1) %>% spread(key=Answer, value=n) 
    Type No Yes NA 
1 TypeA 2 1 NA 
2 TypeB 4 NA 3 
+0

Bu bilmek güzel bir bilgi. Bu bilgiyi paylaştığınız için teşekkürler. 8-) – ayk

İlgili konular