2013-04-05 4 views
6

Jestem entuzjastyczną nowicjuszką R, która potrzebuje pomocy! :)Policz liczbę wystąpień, w których zmienna lub kombinacja zmiennych jest TRUE

mam ramki danych, która wygląda następująco:

id<-c(100,200,300,400) 
a<-c(1,1,0,1) 
b<-c(1,0,1,0) 
c<-c(0,0,1,1) 

y=data.frame(id=id,a=a,b=b,c=c) 

przypadku ID jest unikalny identyfikator (na przykład człowiek) oraz , b i C są obojętne zmienne określające, czy dana osoba ma tę funkcję, czy nie (jak zawsze 1 = PRAWDA).

I R chce się utworzyć matrycę lub ramki danych, gdzie mają zmienne a, b i c, zarówno nazwami kolumn i rzędów. Dla wartości macierzy R będzie musiał obliczyć liczbę identyfikatorów, które mają tę cechę lub kombinację cech.

Na przykład identyfikatory 100, 200 i 400 mają funkcję a następnie w przekątnej macierzy gdzie a i krzyż, R wprowadzi 3. Tylko ID 100 ma obie funkcje aib, stąd R wprowadzi 1 gdzie a i b krzyżują się, i tak dalej.

Powstały ramka danych będzie musiał wyglądać następująco:

l<-c("","a","b","c") 
m<-c("a",3,1,1) 
n<-c("b",1,2,1) 
o<-c("c",1,1,2) 
result<-matrix(c(l,m,n,o),nrow=4,ncol=4) 

Jak mój zestaw danych ma 10 zmiennych i setki obserwacji, będę musiał zautomatyzować cały proces.

Twoja pomoc będzie bardzo mile widziane. Wielkie dzięki!

Odpowiedz

8

Z zasady R:

crossprod(as.matrix(y[,-1])) 
# a b c 
# a 3 1 1 
# b 1 2 1 
# c 1 1 2 
+0

+1 kocham prostych i eleganckich rozwiązań jak ten –

+0

podziękowaniem ty bardzo Josh! –

+0

@NikolayNenov - Nie ma problemu. Zawsze doceniam dobrze sformułowane pytanie z powtarzalnym przykładem! Jeśli nasze odpowiedzi pasują do rachunku, możesz "Zaakceptować" jedną z nich (obie wydają się dla mnie akceptowalne), klikając znacznik wyboru po lewej stronie. –

3

Nazywa się to macierzą przyległości. Można to zrobić bardzo łatwo z pakietem qdap:

library(qdap) 
adjmat(y[,-1])$adjacency 

## a b c 
## a 3 1 1 
## b 1 2 1 
## c 1 1 2 

To generuje ostrzeżenie, ponieważ jesteś karmienia to dataframe. Nie jest to wielka sprawa i można ją zignorować. Zauważyłem również, że upuściłem pierwszą kolumnę (ID) z ujemnym indeksowaniem y[, -1].

Zauważ, że ponieważ rozpoczął się z matrycy logicznej można zdobyć tam:

Y <- as.matrix(y[,-1]) 
t(Y) %*% Y 
Powiązane problemy