2016-08-21 5 views
0

혜,유사도 indice

유사도 indice를 계산하고 싶습니다. 행이 'simialr'일 때 +1을, 그렇지 않은 경우 -1을 얻고 싶습니다.

dataR<- read.table(text=' 
    echant espece 
    ech1 esp1 
    ech2 esp2 
    ech3 esp2 
    ech4 esp3 
    ech5 esp3 
    ech6 esp4 
    ech7 esp4', header=TRUE) 

내가 그와 같은 매트릭스를 좀하고 싶습니다 그럼 난

library(proxy)  
trst<-read.table("Rtest_simil.csv",header=T,sep=",",dec=".") 
    is.numeric(trst[,2]) 
    as.numeric(trst[,2]) #the column "espece" becomes numeric 
    sim<-simil(trst,diag=TRUE) 

simil 기능으로 프록시 패키지를 시도 enter image description here

(이 진단 또는 NA를, 정말 중요하지 않습니다) 그러나 그 결과는 내가 원했던대로 정확하지 않습니다. 1) 예를 들어 ech 2와 3 사이의 유사도는 0.5이고 대각선 길이는 0입니다. 유사성이없는 경우에도 0입니다. 2) ech 레이블이 손실되었습니다. 3) ... 추가 정보 .csv 형식으로 저장할 수 없습니다.

enter image description here

누군가가 조언을 가지고 있습니까? 감사합니다.

답변

1

가이 작업을 수행하는 의심의 여지보다 컴팩트 한 가지 방법은 다음과 같습니다

same.mat <- outer(dataR$espece, dataR$espece, "==") * 2 - 1 

는 열과 행 등으로 이름을 지정하려면 :

library(tidyr) 
same <- function(x) { ifelse(is.na(x), -1, 1) } 
spread(dataR, espece, espece) %>% 
    mutate_at(vars(-echant), funs(same)) 
## echant esp1 esp2 esp3 esp4 
## 1 ech1 1 -1 -1 -1 
## 2 ech2 -1 1 -1 -1 
## 3 ech3 -1 1 -1 -1 
## 4 ech4 -1 -1 1 -1 
## 5 ech5 -1 -1 1 -1 
## 6 ech6 -1 -1 -1 1 
## 7 ech7 -1 -1 -1 1 
+0

고마워, 난 ... – catindri

2

포스트에서 설명하는 행렬을 얻을 수는 게시물에 설명 된대로 rownames와 colnames를 사용할 수 있습니다.

rownames(same.mat) <- colnames(same.mat) <- dataR$echant 
> same.mat 
#  ech1 ech2 ech3 ech4 ech5 ech6 ech7 
#ech1 1 -1 -1 -1 -1 -1 -1 
#ech2 -1 1 1 -1 -1 -1 -1 
#ech3 -1 1 1 -1 -1 -1 -1 
#ech4 -1 -1 -1 1 1 -1 -1 
#ech5 -1 -1 -1 1 1 -1 -1 
#ech6 -1 -1 -1 -1 -1 1 1 
#ech7 -1 -1 -1 -1 -1 1 1 

다른 방법이 될 수있다 :

same.mat <- (as.matrix(dist(as.numeric(dataR$espece)))==0)*2 - 1 
rownames(same.mat) <- colnames(same.mat) <- dataR$echant 
+0

감사합니다, 그것은 또한 작동 R에 progaming 개선 필요 – catindri

관련 문제