2017-03-12 4 views
1

Ich habe ein Datenrahmen table wie dieseVerwenden count() in mehr als einer Spalte und Ordnung führt

 a m g  c1  c2  c3  c4 
1 2015 5 13 bread wine <NA> <NA>  
2 2015 8 30 wine eggs rice cake 
3 2015 1 21 wine rice eggs <NA>  
... 

rief ich die Elemente in der Spalte c1 bis c4 und um sie ich zu benutzen versucht, zählen möchten:

library(plyr) 
c<-count(table,"c1") 

Aber ich weiß nicht, wie man mehr als eine Spalte zählt.

Dann möchte ich arrange(c,desc(freq)) verwenden, um sie zu bestellen, aber wenn ich mit einer Spalte versuche, ist der Wert NA immer oben, und ich will nur Top 3 Elemente. So kann

 c freq 
1 wine  3 
2 eggs  2 
3 rice  2 

Kann mir bitte jemand eine Lösung für dieses Problem. Dank

+0

Wie sei es 'Tabelle (fehlenden oder (Tabelle [starts (Name (Tabelle), "c")])) ' –

Antwort

2

Verwenden melt und table:

df1 <- read.table(text="a m g  c1  c2  c3  c4 
2015 5 13 bread wine NA NA 
2015 8 30 wine eggs rice cake 
2015 1 21 wine rice eggs NA", header=TRUE, stringsAsFactors=FALSE) 

c_col <- melt(as.matrix(df1[,4:7])) 
sort(table(c_col$value),decreasing=TRUE) 

wine eggs rice bread cake 
    3  2  2  1  1 
1

Mit qdaptools, mit dem Beispiel Datenrahmen (mit Namen table) zur Verfügung gestellt:

library(qdapTools) 
counts <- data.frame(count=sort(colSums(mtabulate(table[,4:7])), decreasing=TRUE)) 
subset(counts,rownames(counts)!='<NA>')[1:3,1,drop=FALSE] #remove <NA>, select top 3 elements 

#  count 
# wine  3 
# eggs  2 
# rice  2 
Verwandte Themen