2015-01-29 9 views
7

Muszę znaleźć dla każdego trybu (tryb dla wiersza, a nie dla kolumny) uzyskaną wartość, ile razy pojawia się w swoim wierszu z moich danych.Liczba zliczeń R, ile razy wartość pojawia się w każdym wierszu.

To moje dane

> 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 ze zbioru danych

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") 

Są to tryby dla każdego wiersza

[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 dla tej jednej

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 "," 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", "5", "7", "7", " 7 "," 7 "," 7 ")

Teraz muszę policzyć, ile razy każdy tryb pojawia się w każdym rzędzie. Odpowiedzią powinno być coś takiego:

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

Odpowiedz

5

zakładając, że TiposMotivA i ModaLinhaA mają taką samą długość (co chyba jest w przypadku pełnego zestawu danych):

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

Perfect RockScience, wielkie dzięki! –

+0

@RockScience Myślę, że możesz go uprościć do 'TiposMotivA == ModaLinhaA [wiersz (TiposMotivA)]' lub 'TiposMotivA == rep (ModaLinhaA, ncol (TiposMotivA))' – akrun

+0

@akrun naprawdę, dostosowałem odpowiedź na Twoje sugestie (chociaż sprawia to nieco zamieszanie dla kogoś, kto nie wie, w jaki sposób macierz zbudowano w R). – RockScience

3

Możesz napisać prostą funkcję do policzenia najczęściej numer w wektorze, a następnie zastosować je do każdego wiersza z apply().

Uwaga: Użyłem kodu @Ken_William awesome function for determining the mode of a vector w poniższym kodzie.

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)) bierze sumę logiczną wektor zwrócony przez x == Mode(x). TRUE wartości liczone jako 1 i FALSE wartości liczą się jako zero, więc suma wektora będzie liczbą wejść modalnych.

+0

Idealne rybo, wielkie dzięki! Zrobiło to. –

+0

Bardzo proszę. –

Powiązane problemy