2017-01-31 2 views
2

Ich habe zwei Beobachtungen und mein Ziel ist es, die Häufigkeitszählungen zusammen zu binden, so dass ich z.B. ein Chi-Quadrat-Test.Binden Sie die Häufigkeiten von zwei Beobachtungen in r

a <- c(1,1,5,6,3,6,1,5,5,1,2,5,2,1,3,3,6,5,7,4) 
b <- c(1,5,4,4,1,5,4,4,2,1,2,1,2) 
> table(a) 
a 
1 2 3 4 5 6 7 
5 2 3 1 5 3 1 
> table(b) 
b 
1 2 4 5 
4 3 4 2 

Da der Druck zeigt, mangelt es die zweite Beobachtungs Beobachtungen für die Faktoren 3,6 und 7. Daher kann ich nicht binde sie cbind(table(a), table(b)) verwenden. Da ergibt sich:

> cbind(table(a), table(b)) 
    [,1] [,2] 
1 5 4 
2 2 3 
3 3 4 
4 1 2 
5 5 4 
6 3 3 
7 1 4 
Warning message: 
In cbind(table(a), table(b)) : 
    number of rows of result is not a multiple of vector length (arg 2) 

ich über geeignete Methoden fragen, um die Beobachtungen zu kombinieren, um ein ähnliches Ergebnis wie dieses zu erhalten:

[,1] [,2] 
1 5 4 
2 2 3 
3 3 0 
4 1 4 
5 5 2 
6 3 0 
7 1 0 
+1

Versuchen 'tabulate' statt' table' verwenden. Setzen Sie das Argument 'nbins' auf 7.' cbind (tabulate (a, nbins = 7), tabulate (b, nbins = 7)) ' –

+1

Sie könnten Ihre Daten in einem einzigen Objekt speichern (' stack (list (a = a, b = b)) '), wo Sie' table (stack (Liste (a = a, b = b))) '' verwenden können. –

+0

Merci Mille! Jede Antwort hat ihren eigenen Vorteil in Bezug auf Eleganz, Effizienz und Verständnis. Da ich jedoch nur eine Antwort akzeptieren kann, wählte ich diejenige mit den meisten Upvotes. – raumkundschafter

Antwort

4

wir es factor mit levels als sort ed angegeben umwandeln kann union beider vector s, erhalten die Frequenz jedes vector (table) und cbind es

un1 <- sort(union(a,b)) 
cbind(table(factor(a, levels = un1)), table(factor(b, levels = un1))) 
# [,1] [,2] 
#1 5 4 
#2 2 3 
#3 3 0 
#4 1 4 
#5 5 2 
#6 3 0 
#7 1 0 
2

Dies wird auch funktionieren:

df <- merge(table(a), table(b), by.x='a', by.y='b', all=TRUE)[-1] 
df[is.na(df)] <- 0 
df 
# Freq.x Freq.y 
#1  5  4 
#2  2  3 
#3  3  0 
#4  1  4 
#5  5  2 
#6  3  0 
#7  1  0 
+1

'as.data.frame' sind nicht notwendig. Es passiert intern. Bearbeitet. –

Verwandte Themen