2014-09-18 14 views
7

filtresinde hatalar veriyor dplyr kullanıyorum ve bunu seviyorum ama garip bir davranış buldum. Farklı kaynaklardan bazı verileri temizliyorum ve bunları bir veri çerçevesinde bir araya getiriyorum. Bir parçası daha fazla temizlik gerektirdi, dplyr ile bitti ve tbl nesnesine neden oldu. Diğer kısım daha basitti ve data.frame nesnesine sahiptim. Ben rbind Onları birlikte, ve ben analiz yaparken, dplyr filtre işlevini kullanmaya çalışırken, düzgün çalışmaz. Örnek: Ben df3[df3$group == "C", ] yaparsanızrbind tbl ve df,

df1 <- data.frame(
    group = factor(rep(c("C", "G"), 5)), 
    value = 1:10) 
df1 <- df1 %>% group_by(group) #df1 is now tbl 
df2 <- data.frame(
    group = factor(rep("G", 10)), 
    value = 11:20) 
df3 <- rbind(df1, df2) #df2 is data.frame 
df3 %>% filter(group == "C") #returns filtered rows in df1 and all rows of df2 
Source: local data frame [15 x 2] 
Groups: group 

    group value 
1  C  1 
2  C  3 
3  C  5 
4  C  7 
5  C  9 
6  G 11 
7  G 12 
8  G 13 
9  G 14 
10  G 15 
11  G 16 
12  G 17 
13  G 18 
14  G 19 
15  G 20 

, düzgün çalışır. Hata?

+1

deneyin 'df3%>% grubu çözme()%>% filtre (grup == "C") 'ya da' as.data.frame (df3)%>% filtre (grup == "C") '. – akrun

+0

@akrun yep, bu çalışmaların ikisi de! –

+0

'df3 <- rbind (d1, as.tbl (df2))' aynı sorunla sonuçlanır, bu yüzden bir veri çerçevesi olan 'df2' ile ilgili değildir. – Henrik

cevap

0

Çünkü df1'de group_by'yi kullandığınızda, yapısı değişir ve işlemler grup bazında gerçekleştirilir. Eğer rbind yaptığınızda

df3 <- rbind(df1, df2) 

R ilk aregument yani df1 itibariyle ancak df1 yana aynı yapıyla DF3 oluşturmaya çalışır ve sadece üzerinde uygulandığı filtreyi groupwose uyguladığınızda df2, dataframes farklı türleri vardır df1 ve hatalı çıktıyla sonuçlanır. Eğer

df3<-rbind(df2,df1) 

DF3 kontrol ederseniz

grupları içermeyen normal dataframe ve doğru çıkış verir. Eğer satırı silin gerektiğini

0

'< df1 - df1%>% group_by (grup) # df1 şimdi tbl olan' sen tbl_df için data.frame değiştirmek isterseniz

, sen df1<-tbl_df(df1)

kullanmak gerektiğini
df1 <- data.frame(
    group = factor(rep(c("C", "G"), 5)), 
    value = 1:10) 


# df1 <- df1 %>% group_by(group) #df1 is now tbl 
    # df1<-tbl_df(df1) 
    df2 <- data.frame(
     group = factor(rep("G", 10)), 
     value = 11:20) 
    df3 <- rbind(df1, df2) #df2 is data.frame 
    df3 %>% filter(group == "C") #returns filtered rows in df1 and all rows of df2 
İlgili konular