实际上,我想从另一个矢量“数据”创建一个矢量“比较”。 我想将“数据”中的每个元素与自己以及向量中后面的所有元素进行比较。如果有平局,我将1附加到“比较”,否则将0附加。 例如:
data=c(3,6,7,3)
# I compare 3 to 3, 6, 7 and 3
# Then I compare 6 to 6, 7, and 3
# Then 7 to 7 an 3
# Then 3 to 3 so I get
compare=c(1,0,0,1,1,0,0,1,0,1)
这是我所做的:
for(i in 1:length(data))
{
for(j in 0:(length(data)-i))
{
if (data[i]==data[i+j])
{
compare=append(compare,1)
}
else
{
compare=append(compare,0)
}
}
}
有什么方法可以向量化向量元素之间的这种比较?
答案 0 :(得分:3)
我们可以使用react-hooks-testing-library
:
dist
答案 1 :(得分:2)
我们可以使用outer
来将data
与自身进行比较,然后提取下三角数据,以便仅输出遵循当前值的数据。
mat <- +(outer(data, data, `==`))
mat[lower.tri(mat, diag = TRUE)]
#[1] 1 0 0 1 1 0 0 1 0 1
答案 2 :(得分:1)
您可以对索引使用sapply:
as.numeric(unlist(sapply(1:length(data), function(k) data[k] == data[k:length(data)])))
[1] 1 0 0 1 1 0 0 1 0 1
将索引k的当前值与等于或大于k的所有值进行比较。 unlist
允许连接每次迭代k的结果。最后as.numeric
将布尔值转换为整数。