2012-09-18 18 views
10

ここではいくつかの提案された解を試しました。しかし、私の場合はうまくいきませんでした。 私はここに、コードを持っている:行列の対角をゼロに設定する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) 

は、私がゼロと対角値を設定したいです。私の場合は、最後の2行で使用されているコードが機能していないようです。

また、私はaでファイル名を使用したい、と私は

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

を使用しようとしたが、何も私のディレクトリに表示されていないAB_Files_Whirr_127.csv としてそれを保存します。 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 

答えて

10

aは、出力ファイルの名前に使用することはできません、それがデータフレームです。即ちdiag(x) <- 0diag<-(x, 0)として解釈され、

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

diagラインの構文は、新しいRユーザーに面白い見える傾向があるが、実際に割り当て機能diag<-を呼び出すだけ別の構文です。

更新:複数のファイル

あなたはこれを行うことができ、複数のペアのファイルについては、上記を繰り返します

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

ありがとうございます、私の対角線の解決策は動作しますが、ファイルは私の作業ディレクトリには表示されません... – user1676484

+0

私はおそらくそれを読むと同時に投稿を編集しました。 'paste0(" CR_ "、infile、" .csv ")の解決策は、明確に機能するはずです。 'paste0'コマンドが文字スカラーを返すことを確認してください。 – Backlin

+0

それはdiagのための単純な解決策です。愚かな私!とにかく、私は複数のファイルを持っていると言いましょう、つまり、私はファイルパスにファイル(paste = "0")を置き換える必要があることを意味しますか? – user1676484

関連する問題