2014-08-29 61 views
-2

我想獲得兩列中值相等的實例的計數。但是,我的等式不起作用。R和i和j相等的情況下的計數

有人可以指出這是錯誤的?

count<-0 
for (i in 1:length(v1)){ 
    for (j in 1:length(v2)){ 
    if (i == j){ 
     count <- count+ 1 } 
    } 
} 
+2

就目前而言,這太寬泛了。什麼是'v1'?什麼是'v2'?期望的結果是什麼?請將這些添加到您的帖子中。 – 2014-08-29 03:58:33

+1

爲什麼不簡單的方法是:'min(length(v1),length(v2))'。此外,代碼適用於兩個長度不等的向量。 – 2014-08-29 04:05:11

+0

'sum(i == j)'或'cumsum(i == j)'實際上是我的猜測。 – thelatemail 2014-08-29 04:10:41

回答

1

這是因爲你在比較,而不是每個小區(V1 [i]和V2 [j]的)的內容的索引(I == j)的。你應該把它寫在這樣:

count<-0 
for (i in 1:length(v1)) 
{ 
    for (j in 1:length(v2)) 
    { 
     if (v1[i] == v2[j]) 
     { 
      count <- count+ 1 
     } 
    } 
} 
+2

如果您喜歡慢速代碼,請使用此答案。 – Roland 2014-08-29 07:21:23

0

我不完全相信你的要求。如果你有一個數據幀兩列,你想知道多少倍值相同,那麼這個工程...

a<-1:10 
b<-c(2,2,4,2,5,6,1,2,9,10) 
df<-data.frame(a,b) 

sum(df$a == df$b) #[1] 5 

我的回答需要提醒的是我可能是完全缺失的點你的問題......

我猜看着上面的意見,你的問題更多的是瞭解一列/變量的多少倍值出現在另一個的 - 大量的解決方案都已經張貼以上

+1

不需要創建數據框。 sum(a == b)就足夠了。 – rnso 2014-08-29 06:17:41

1

一些示例數據:

set.seed(42) 
v1 <- sample(0:1, 3, TRUE) 
#[1] 1 1 0 
v2 <- sample(0:1, 3, TRUE) 
#[1] 1 1 1 

從接受的答案來看,你想這樣:

sum(outer(v1, v2, "==")) 
#[1] 6 

注意,這種解決方案會比雙for循環快得多。然而,它需要更多的內存,這可能會成爲一個巨大的向量問題(因爲它計算的矩陣,隨着向量長度增長二次方)。

相關問題