我正在尝试获取两列中的值相等的实例计数。但是,我的等式不起作用。
有人可以指出哪里出错了吗?
count<-0
for (i in 1:length(v1)){
for (j in 1:length(v2)){
if (i == j){
count <- count+ 1 }
}
}
答案 0 :(得分:1)
这是因为您正在比较索引(i == j)而不是每个单元格的内容(v1 [i]和v2 [j])。你应该这样写:
count<-0
for (i in 1:length(v1))
{
for (j in 1:length(v2))
{
if (v1[i] == v2[j])
{
count <- count+ 1
}
}
}
答案 1 :(得分: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
循环快得多。但是,它需要更多的内存,这可能会成为大型矢量的一个问题(因为它会计算一个随矢量长度增长的矩阵)。
答案 2 :(得分: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
我回答说,我可能完全忽略了你的问题......
我想看看上面的评论,你的问题更多的是要知道一个列/变量的值出现在另一个列/变量的多少次 - 上面已经发布了很多解决方案