我想獲得兩列中值相等的實例的計數。但是,我的等式不起作用。R和i和j相等的情況下的計數
有人可以指出這是錯誤的?
count<-0
for (i in 1:length(v1)){
for (j in 1:length(v2)){
if (i == j){
count <- count+ 1 }
}
}
我想獲得兩列中值相等的實例的計數。但是,我的等式不起作用。R和i和j相等的情況下的計數
有人可以指出這是錯誤的?
count<-0
for (i in 1:length(v1)){
for (j in 1:length(v2)){
if (i == j){
count <- count+ 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
}
}
}
如果您喜歡慢速代碼,請使用此答案。 – Roland 2014-08-29 07:21:23
我不完全相信你的要求。如果你有一個數據幀兩列,你想知道多少倍值相同,那麼這個工程...
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
我的回答需要提醒的是我可能是完全缺失的點你的問題......
我猜看着上面的意見,你的問題更多的是瞭解一列/變量的多少倍值出現在另一個的 - 大量的解決方案都已經張貼以上
不需要創建數據框。 sum(a == b)就足夠了。 – rnso 2014-08-29 06:17:41
一些示例數據:
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
循環快得多。然而,它需要更多的內存,這可能會成爲一個巨大的向量問題(因爲它計算的矩陣,隨着向量長度增長二次方)。
就目前而言,這太寬泛了。什麼是'v1'?什麼是'v2'?期望的結果是什麼?請將這些添加到您的帖子中。 – 2014-08-29 03:58:33
爲什麼不簡單的方法是:'min(length(v1),length(v2))'。此外,代碼適用於兩個長度不等的向量。 – 2014-08-29 04:05:11
'sum(i == j)'或'cumsum(i == j)'實際上是我的猜測。 – thelatemail 2014-08-29 04:10:41