2017-02-14 1 views
0

Ich bin neu in der Programmierung in R, also suche ich nach Hilfe, um mich anzufangen. Ich habe einen "langen" Datensatz mit 4 Spalten (die ich zuvor in R umgeformten):R: Zähl- oder Kontingenztabellen mit einer Schleife

d=matrix(c(1,2,3,4,5,6,7,"A","A","A","B","B","B","B",0,0,99,0,0,99,0,99,0,99,99,0,0,99), ncol=4) 
colnames(d) = c("ID","S.ID","ValA","ValB"); dt=as.table(d) 

I, für jedes S.ID separat erstellen möchte (dh A und B), eine Kontingenztabelle für Zählungen von Vala und Valb

zum Beispiel (hier) -

enter image description here

In meinem konkreten Beispiel habe ich 17 S.IDs und ich möchte ein Programm schreiben, das die Zufälligkeit generieren Tabellen für jeden von diesen.

Wird dies in R Studio einfacher? Wenn ja, können Sie bitte auch angeben, wie?

Vielen Dank!

-Danke allen, die so schnell geantwortet haben! :)

+0

Mögliches Duplikat von http://stackoverflow.com/questions/13841599/calculate-frequency-o f-Vorkommen in einem Array-using-r – akrun

Antwort

0

Sie können dies versuchen:

d <- as.data.frame(d) 
l <- lapply(unique(d$S.ID), function(x) xtabs(~ValB+ValA, subset(d, S.ID==x))) 
names(l) <- unique(d$S.ID) 
l 
#$A 
# ValA 
#ValB 0 99 
# 0 1 0 
# 99 1 1 

#$B 
# ValA 
#ValB 0 99 
# 0 1 1 
# 99 2 0 
1

Mit tapply oder by Bedürfnisse Umwandlung in ein data.frame:

d<-data.frame(d) 
by(d, d$S.ID, function(grouped.d) table(grouped.d$ValA, grouped.d$ValB)) 
3

Sie table auf mehrere Variablen verwenden können:

with(as.data.frame(d), table(ValA, ValB, S.ID)) 

# , , S.ID = A 
# ValB 
#ValA 0 99 
# 0 1 1 
# 99 0 1 

#, , S.ID = B 
# ValB 
#ValA 0 99 
# 0 1 2 
# 99 1 0