2015-01-29 4 views
7

Ich muß für jeden Modus, um herauszufinden, (für eine Reihe Modus, keine Spalt) Wert obtainned, wie oft es aus meinen Daten in der entsprechenden Zeile erscheinen.R gezählte Anzahl von Malen ein Wert in jeder Zeile erscheint

Dies ist meine Daten

> head(TiposMotivA) 
    Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11 Q12 Q13 Q14 Q15 Q16 Q17 Q18 Q19 Q20 Q21 
1 5 4 4 4 6 6 7 6 4 6 6 6 4 4 4 4 6 7 4 4 6 
2 5 4 4 5 5 5 5 5 5 5 7 5 4 3 1 6 6 5 6 7 7 
3 4 5 4 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 
4 5 5 7 7 4 6 6 6 7 7 6 7 7 6 6 7 4 7 6 6 7 
5 6 1 7 6 7 7 7 7 7 7 6 7 2 2 3 6 3 7 7 7 7 
6 4 4 3 3 4 5 4 3 4 7 6 6 4 4 6 4 5 7 6 6 7 

dput aus diesem Datensatz

dput(head(TiposMotivA)) 
    structure(list(Q1 = c(5L, 5L, 4L, 5L, 6L, 4L), Q2 = c(4L, 4L, 
    5L, 5L, 1L, 4L), Q3 = c(4L, 4L, 4L, 7L, 7L, 3L), Q4 = c(4L, 5L, 
    4L, 7L, 6L, 3L), Q5 = c(6L, 5L, 5L, 4L, 7L, 4L), Q6 = c(6L, 5L, 
    4L, 6L, 7L, 5L), Q7 = c(7L, 5L, 5L, 6L, 7L, 4L), Q8 = c(6L, 5L, 
    4L, 6L, 7L, 3L), Q9 = c(4L, 5L, 5L, 7L, 7L, 4L), Q10 = c(6L, 
    5L, 4L, 7L, 7L, 7L), Q11 = c(6L, 7L, 5L, 6L, 6L, 6L), Q12 = c(6L, 
    5L, 4L, 7L, 7L, 6L), Q13 = c(4L, 4L, 5L, 7L, 2L, 4L), Q14 = c(4L, 
    3L, 4L, 6L, 2L, 4L), Q15 = c(4L, 1L, 5L, 6L, 3L, 6L), Q16 = c(4L, 
    6L, 4L, 7L, 6L, 4L), Q17 = c(6L, 6L, 5L, 4L, 3L, 5L), Q18 = c(7L, 
    5L, 4L, 7L, 7L, 7L), Q19 = c(4L, 6L, 5L, 6L, 7L, 6L), Q20 = c(4L, 
    7L, 4L, 6L, 7L, 6L), Q21 = c(6L, 7L, 5L, 7L, 7L, 7L)), .Names = c("Q1", 
    "Q2", "Q3", "Q4", "Q5", "Q6", "Q7", "Q8", "Q9", "Q10", "Q11", 
    "Q12", "Q13", "Q14", "Q15", "Q16", "Q17", "Q18", "Q19", "Q20", 
    "Q21"), row.names = c(NA, 6L), class = "data.frame") 

Das sind die Modi für jede Zeile

[1] "4" "5" "4" "7" "7" "4" "7" "6" "7" "7" "7" "7" "7" 
    [14] "5" "7" "6" "7" "6" "7" "7" "7" "7" "7" "7" "7" "7" 
    [27] "7" "7" "7" "5" "2" "7" "7" "7" "7" "7" "6" "6" "7" 
    [40] "4" "3" "4" "7" "5" "6" "7" "7" "6" "7" "6" "7" "7" 
    [53] "7" "6" "7" "7" "5" "7" "7" "7" "7" "7" 


> 

dput für diesen einen

dput (ModaLinhaA) c ("4", "5", "4", "7", "7", "4", "7", "6", "7", "7", " 7, 7, 7, 5, 7, 6, 7, 6, 7, 7, 7, 7 "7", "7", "7", "7", "7", "7", "5", "2", "7", "7", "7", "7" "7", "6", "6", "7", "4", "3", "4", "7", "5", "6", "7", "7", 6, 7, 6, 7, 7, 7, 6, 7, 7, 7, 7, 7 7" , "7", "7")

Jetzt muss ich zählen, wie oft jeder Modus in jeder Zeile angezeigt. Die Antwort sollte wie folgt sein:

Row Mode Qt 
    1  4 10 
    2  5 10 
    3  4 11 

Antwort

5

davon aus, dass TiposMotivA und ModaLinhaA die gleiche Länge haben (was ich denke, der Fall in Ihrem vollständigen Datensatz ist):

data.frame(Row = 1:nrow(TiposMotivA), 
      Mode = ModaLinhaA, 
      Qt = rowSums(TiposMotivA == rep(ModaLinhaA,ncol(TiposMotivA)))) 
+0

Perfect RockScience, vielen Dank! –

+0

@RockScience Ich denke du könntest es vereinfachen zu 'TiposMotivA == ModaLinhaA [row (TiposMotivA)]' oder 'TiposMotivA == rep (ModaLinhaA, ncol (TiposMotivA))' – akrun

+0

@akrun, ich habe die Antwort für deinen Vorschlag angepasst (obwohl es es etwas verwirrender für jemanden macht, der nicht weiß, wie die Matrix in R aufgebaut ist) – RockScience

3

Sie können eine einfache Funktion schreiben, die häufigste Zahl in einem Vektor zu zählen und sie dann mit apply() auf jede Zeile anwenden.

Hinweis: Ich habe @Ken_William awesome function for determining the mode of a vector im folgenden Code verwendet.

Mode <- function(x) { # @Ken_Williams's formula for mode 
    ux <- unique(x) 
    ux[which.max(tabulate(match(x, ux)))] 
} 

TiposMotivA$Qt <- apply(TiposMotivA, 1, function(x) sum(x == Mode(x))) 

sum(x == Mode(x)) nimmt die Summe des logischen Vektors durch x == Mode(x) zurückgegeben. TRUE Werte zählen als 1 und FALSE Werte zählen als Null, so dass die Summe des Vektors wird die Zählung der modalen Eintrag sein.

+0

Perfekt Ribo, vielen Dank! Es hat den Trick gemacht. –

+0

Sie sind herzlich willkommen. –

Verwandte Themen