2017-07-20 11 views
1

不一致ペアの数を数えようとしています。私が実行したときに不一致ペアをカウントする関数が機能していません

しかし、たとえば:

arg1=c("b","c","a","d") 
arg2 = c("b","c","d","a") 

あり1耳障りペアは、( "" と "D" ペア):上記にある

require(asbio) 
sum(ConDis.matrix(arg1,arg2)==-1,na.rm=TRUE) 

私が受け取る答えは私も試してみました

から5(1代わりに正解の)::

require(RankAggreg) 
require(DescTools) 
xy <- table(arg1,arg2) 
cd <- ConDisPairs(xy) 
cd$D 
です

答えは再び5です。

私には何が欠けていますか?

答えて

6

を変更し、私はあなたがどのようにConDis.matrix作品を誤解していると思います。

これが参照するペアは要素のインデックスのペアであり、関数は両方のベクトルで同じ方法で移動しているかどうかを各ペアごとにチェックします。 OBS1とobs3(「」「B」よりも低くなっている間

  1. だから、あなたのベクトルで、あなたは確かに5不調和ペアを持っている、つまり(注文した定量的視野に手紙を考慮して) obs1とobs4との間の「a」はarg2の「b」よりも低いが、「d」はarg1の方が高い)

  2. obs2とobs3の間(「a」はobs2とobs4の間の "a"は "arg2の" c "よりも低いが、" d "はarg1の方が高い) obs3とobs4間
  3. (「」ARG1に「D」よりも低くなっているが、「d」が「」arg2の中よりも高くなる)
+0

Cathに感謝します。私はまだちょっと混乱しています。 「同じように動く」とはどういう意味ですか? – nafrtiti

+1

@nafrtitiこれは、両方のベクトルで低から高へ、または高から低へのいずれかに行くことを意味します.2つの要素の間の差は、両方のベクトル – Cath

1

@ Cathの最初のコメントに基づいて、文字ベクトルを要素に変換することは、テキスト値を関数に使用できる整数にマッピングすることで回避策を提供するように思えます。編集:因子レベルの並べ替えが最終結果を変更することに注意してください。これが期待される行動であれば、私は不和関数について十分に知りません。

# Original Character vectors 
arg1 <- c("b","c","a","d") 
arg2 <- c("b","c","d","a") 

# Translate character vectors into factors 
all_levels <- unique(arg1, arg2) 
arg1 <- factor(arg1, levels = all_levels) 
arg1 
[1] b c a d 
Levels: b c a d 

arg2 <- factor(arg2, levels = all_levels) 
arg2 
[1] b c d a 
Levels: b c a d 

# This maps each text string to a number 
as.numeric(arg1) 
[1] 1 2 3 4 
as.numeric(arg2) 
[1] 1 2 4 3 

# Use the underlying numeric data in the function 
require(asbio) 
sum(ConDis.matrix(as.numeric(arg1), as.numeric(arg2))==-1,na.rm=TRUE) 
[1] 1 

編集:因子レベルをソートすることは、最終的な出力

arg1 <- c("b","c","a","d") 
arg2 <- c("b","c","d","a") 

all_levels <- sort(unique(arg1, arg2)) # sorted 

arg1 <- factor(arg1, levels = all_levels) 
arg2 <- factor(arg2, levels = all_levels) 

sum(ConDis.matrix(as.numeric(arg1), as.numeric(arg2))==-1,na.rm=TRUE) 
[1] 5 
+0

実際に文字が既に(あなたがRでアルファベット順に並べ替えることができます)注文されています機能はあなたが期待できるように機能します。因子 – Cath

+0

に変換する必要はありません@ダミアン - もし私が2つの正解をマークすることができれば、あなたも同様にマークします。ありがとう! – nafrtiti

+0

@Cath - 要因をソートせずに機能しません。私は 'sum(ConDis.matrix(as.numeric(arg1)、as.numeric(arg2))== - 1、na.rm = TRUE)'を試して、エラーメッセージを出しました。 – nafrtiti

関連する問題