2016-04-22 6 views
3

Ich habe mit R begonnen und finde immer noch meinen Weg mit der Syntax. Ich suche nach den Frequenzen für eine skalierte Variable, die Werte von 0 bis 10 und NA hat.Getting R Häufigkeit zählt für alle möglichen Antworten

Id <- c(1,2,3,4,5) 
ClassA <- c(1,NA,3,1,1) 
ClassB <- c(2,1,1,3,3) 
R <- c(5,5,7,NA,9) 
S <- c(3,7,NA,9,5) 
df <- data.frame(Id,ClassA,ClassB,R,S) 
library(plyr) 
count(df,'R') 

ich ein Ergebnis von

 R freq 
    1 5 2 
    2 7 1 
    3 9 1 
    4 NA 1 

Ich bin für ein Ergebnis von

R freq 
1 0 0 
2 1 0 
3 2 0 
4 3 0 
5 4 0 
6 5 2 
7 6 0 
8 7 1 
9 8 0 
10 9 1 
11 10 0 
12 NA 1 

suchen Wenn ich den Vektor zeigt die möglichen Ergebnisse haben

RAnswers <- c(0,1,2,3,4,5,6,7,8,9,10,NA) 

Wie würde ich es mit dem Datensatz anwenden? das obige Ergebnis?

+0

Als Ergänzung zur Antwort gepostet verwenden, ich möchte anmerken, dass die [Beschreibung] (http: // www.inside-r.org/packages/cran/plyr/docs/count) von 'count' sagt:" Entspricht as.data.frame (table (x)), enthält aber keine Kombinationen mit Nullzählungen. " – Gabe

Antwort

1

Hier ist eine Basis R Lösung um table() gebaut, match() und replace():

freq <- table(df$R,useNA='ifany'); 
freq; 
## 
## 5 7 9 <NA> 
## 2 1 1 1 
R <- c(0:10,NA); 
df2 <- data.frame(R=R,freq=freq[match(R,as.integer(names(freq)))]); 
df2$freq[is.na(df2$freq)] <- 0; 
df2; 
##  R freq 
## 1 0 0 
## 2 1 0 
## 3 2 0 
## 4 3 0 
## 5 4 0 
## 6 5 2 
## 7 6 0 
## 8 7 1 
## 9 8 0 
## 10 9 1 
## 11 10 0 
## 12 NA 1 

Edit: Frank hat eine bessere Antwort, hier, wie Sie table() auf einen Faktor die bekommen können erforderlicher Ausgang:

setNames(nm=c('R','freq'),data.frame(table(factor(df$R,levels=RAnswers,exclude=NULL)))); 
##  R freq 
## 1  0 0 
## 2  1 0 
## 3  2 0 
## 4  3 0 
## 5  4 0 
## 6  5 2 
## 7  6 0 
## 8  7 1 
## 9  8 0 
## 10 9 1 
## 11 10 0 
## 12 <NA> 1 
+5

Ich denke 'Tabelle (Faktor (df $ R, levels = RAswers, exclude = NULL))' funktioniert. (Vielleicht hast du 'Ranswers' im OP nicht bemerkt?) – Frank

+0

Tabelle (Faktor (df $ R, levels = RAswers, exclude = NULL)) gibt die richtigen Antworten ohne Label. Was müsste hinzugefügt werden, um die gleiche Ausgabe zu erhalten? –

1

Diese Art von Aufgaben ist leicht mit packa erledigt ge dplyr. Für die nicht verwendeten Werte von R zu halten, müssen Sie R als Faktor definieren und tidyr ist complete-Funktion

library(dplyr) 
library(tidyr) 
df %>% 
    mutate(R = factor(R, levels=1:10)) %>% 
    group_by(R) %>% 
    summarise(freq=n()) %>% 
    complete(R, fill=list(freq=0)) 
Verwandte Themen