2012-09-18 15 views
10

Próbowałem tutaj kilku proponowanych rozwiązań. Ale to nie zadziałało w moim przypadku. Mam kod tutaj:Ustaw przekątną macierzy na zero w R

a <- read.table("Whirr_127.csv", header=T, sep=",", row.names=1) # task assignment/people vs task 
b <- read.table("Files_Whirr_127.csv", header=T, sep=",", row.names=1) #task vs files 
a 
b 

#calc cr , cr = ta * tf * transpose(ta) 
cr <- as.matrix(a) %*% (as.matrix(b) %*% as.matrix(t(b)) %*% as.matrix(t(a))) 
cr 

#set value to 1, to initialize table 
cr[cr>=1]<-1 
cr 

#identify diagonal matrix, set to zero 
cr<-as.matrix(0,ncol=ncol(cr),nrow=nrow(cr)) 
cr<-diag(cr,x=0) 

Chcę ustawić wartość przekątnej jako zero. Wygląda na to, że kod użyty w dwóch ostatnich liniach nie działa w moim przypadku.

Również chciałbym stosować nazwę pliku w a i zapisaniu go jako AB_Files_Whirr_127.csv Próbowałem użyć

write.csv(cr,file = paste("CR_", a,".csv") 

ale nic nie pojawia się w moim katalogu.

wyjście próbki dla Cr:

   Adrian Cole Alison Wong Andrei Savu Bruno Dumon Edward J. Yoon Eugene Koontz Jakob Homan Kelvin Kakugawa Kirk True Lars George Soren Macbeth Stu Hood 
Adrian Cole    0   0   0   0    0    0   0    0   0   0    0  0 
Alison Wong    0   0   0   0    0    0   0    0   0   0    0  0 
Andrei Savu    0   0   1   0    0    0   0    0   0   1    1  0 
Bruno Dumon    0   0   0   0    0    0   0    0   0   0    0  0 
Edward J. Yoon   0   0   0   0    0    0   0    0   0   0    0  0 
Eugene Koontz    0   0   0   0    0    0   0    0   0   0    0  0 
Jakob Homan    0   0   0   0    0    0   0    0   0   0    0  0 
Kelvin Kakugawa   0   0   0   0    0    0   0    0   0   0    0  0 
Kirk True     0   0   0   0    0    0   0    0   0   0    0  0 
Lars George    0   0   1   0    0    0   0    0   0   1    1  0 
Soren Macbeth    0   0   1   0    0    0   0    0   0   1    1  0 
Stu Hood     0   0   0   0    0    0   0    0   0   0    0  0 
Tibor Kiss    0   0   0   0    0    0   0    0   0   0    0  0 
Tom White     0   0   1   0    0    0   0    0   0   1    1  0 
Unassigned    0   0   0   0    0    0   0    0   0   0    0  0 
       Tibor Kiss Tom White Unassigned 
Adrian Cole    0   0   0 
Alison Wong    0   0   0 
Andrei Savu    0   1   0 
Bruno Dumon    0   0   0 
Edward J. Yoon   0   0   0 
Eugene Koontz   0   0   0 
Jakob Homan    0   0   0 
Kelvin Kakugawa   0   0   0 
Kirk True    0   0   0 
Lars George    0   1   0 
Soren Macbeth   0   1   0 
Stu Hood     0   0   0 
Tibor Kiss    0   0   0 
Tom White    0   1   0 
Unassigned    0   0   0 

Odpowiedz

10

a nie może być używany w nazwie pliku wyjściowego, ponieważ nie jest zmienny charakter, jest to ramka danych.

infile <- "Whirr_127.csv" 
a <- read.table(infile, header=T, sep=",", row.names=1) 
.... 
diag(cr) <- 0 
write.csv(cr, file = paste0("CR_", infile, ".csv") 

Składnia linii diag zazwyczaj wyglądają zabawne nowych użytkowników R, ale w rzeczywistości jest to po prostu alternatywny składnia wywołania funkcji przypisywania diag<-, tj diag(x) <- 0 jest interpretowany jako diag<-(x, 0).

Aktualizacja: Wiele plików

Jeśli chcesz powtórzyć powyższe wielu sparowany plików można to zrobić.

a.files <- grep("^Whirr", dir(), value=TRUE) 
b.files <- paste0("Files_", a.files) 
for(i in length(a.files)){ 
    a <- read.table(a.files[i], ...) 
    b <- read.table(b.files[i], ...) 
    ... 
    write.csv(cr, paste0("CR_", a.files[i], ".csv")) 
} 
+0

dziękuję, rozwiązanie przekątnej działa dla mnie, ale plik nie pojawia się w moim katalogu roboczym ... – user1676484

+0

Edytowałem post w tym samym czasie, kiedy go przeczytałeś. Rozwiązanie z 'paste0 (" CR_ ", infile," .csv ")' powinno z pewnością działać. Jeśli nie, upewnij się, że polecenie 'paste0' zwraca znak skalarny. – Backlin

+0

to tylko proste rozwiązanie dla diag. głupi ja! tak czy inaczej, powiedzmy, mam wiele plików, to znaczy, że muszę wymienić plik infile (file = paste0 ("CR_", infile, ".csv") z ścieżką do pliku? IS jest poprawny? – user1676484