2012-10-30 10 views
5

Ich versuche, eine Proportion für jede Zelle zu erhalten, indem Sie jede Zeile durch die Zeile Summe teilen, aber R gibt mir eine Fehlermeldung,Wie die Gesamtsummen der Tabelle hinzufügen und Proportion für jede Zelle in erhalten R

Fehler in data.table $ Land: $ Betreiber ist für die Atom Vektoren

ungültig Wie kann ich dieses Problem beheben? Wie können Summensummenwerte für die gesamten Spalten und Zeilen zu data.table hinzugefügt werden? Ich bekomme diese Werte, wenn ich addmargins(data.table) ausführen, aber ich möchte die Summen an meinen Datenrahmen anhängen.


Hier ist mein Code:

x = c(40,50,30,30,50)     
y = c(40,20,30,40,45)        
data.table = rbind(x,y) 
data.table 
dimnames(data.table)=list("Country"=c("England","Germany"),"Score"=c("Q-Score","T-score","X-score","Y-score","Z-score")) 
addmargins(data.table) 
table(data.table$Country,data.table$Score/rowSums(table(data.table&Country,data.table$Score))) 
+1

Nirgendwo in Ihrem Code erstellen Sie ein data.frame. – mnel

+0

Ich meine data.table! – Pirate

Antwort

10

Der Ausgang eines Anrufs an table ist ein Objekt der Klasse table. Dies ist im Grunde ein array. Sie können $ nicht verwenden, um Arrays oder atomare Vektoren zu referenzieren. (Daher der Fehler).

Wenn Sie die Ergebnisse von addmargins(data.table) zu einem Objekt zuweisen möchten, dann sind Sie mehr als frei zu tun, so

margin_table <- addmargins(data.table) 

Es sieht aus wie Sie wollen dann eine Tabelle der relativen Verhältnisse schaffen.

prop.table ist dafür nützlich.

prop.table(margin_table) 

     Score 
Country  Q-Score T-score X-score Y-score Z-score  Sum 
    England 0.02666667 0.03333333 0.02 0.02000000 0.03333333 0.1333333 
    Germany 0.02666667 0.01333333 0.02 0.02666667 0.03000000 0.1166667 
    Sum  0.05333333 0.04666667 0.04 0.04666667 0.06333333 0.2500000 

Sie auch prop.table auf dem Original laufen können die Reihe Proportionen zu erhalten (1 = Zeilen, 2 = Spalten)

prop.table(data.table, margins = 1) 
     Score 
Country  Q-Score T-score X-score Y-score Z-score 
    England 0.2000000 0.2500000 0.1500000 0.1500000 0.2500000 
    Germany 0.2285714 0.1142857 0.1714286 0.2285714 0.2571429 

Die Hilfedatei für table (Zugriff durch ?table oder help('table') detailliert und enthält Links zu den Hilfedateien für prop.table und addmargins!

+0

danke für die Hilfe zum Hinzufügen von Margen! eigentlich habe ich nicht versucht, die relativen Proportionen zu bekommen. Ich versuche, die Reihe für England durch ihre Reihen zu teilen und die deutsche Reihe durch ihre Reihen zu teilen. Könntest du mir zeigen, wie man das mit dieser Tabelle macht? oder sollte ich andere Daten machen? – Pirate

+1

Siehe meine Bearbeitung. Lesen Sie die Hilfedateien! Wenn das, was Sie tun, eine Standardaufgabe ist, wird es fast sicher eine Funktion in einem Paket dafür geben. – mnel