设 vec = [("A", "B"), ("A", "C"), ("A", "D"), ("B", "C"), ("B", "D")] 是一个向量。
我想统计for循环中每个步骤中每个元素出现的次数。
function count_occurrences(vec)
vect = []
nb_appear_A = 0
nb_appear_B = 0
nb_appear_C = 0
nb_appear_D = 0
for v in vec
v1, v2 = v
if v1 == "A"
nb_appear_A += 1
end
if v2 == "A"
nb_appear_A += 1
end
if v2 == "B"
nb_appear_B += 1
end
if v1 == "B"
nb_appear_B += 1
end
if v1 == "C"
nb_appear_C += 1
end
if v2 == "C"
nb_appear_C += 1
end
if v1 == "D"
nb_appear_D += 1
end
if v2 == "D"
nb_appear_D += 1
end
# I check for each pairs and push them onto vect
if v1 == "A" && v2 == "B"
push!(vect, (nb_appear_A, nb_appear_B))
elseif v1 == "A" && v2 == "C"
push!(vect, (nb_appear_A, nb_appear_C))
elseif v1 == "A" && v2 == "D"
push!(vect, (nb_appear_A, nb_appear_D))
elseif v1 == "B" && v2 == "C"
push!(vect, (nb_appear_B, nb_appear_C))
elseif v1 == "B" && v2 == "D"
push!(vect, (nb_appear_B, nb_appear_D))
elseif v1 == "C" && v2 == "D"
push!(vect, (nb_appear_C, nb_appear_D))
end
end
return vect
end
count_occurrences(vec)
5-element Vector{Any}:
(1, 1)
(2, 1)
(3, 1)
(2, 2)
(3, 2)
此代码有效,但我想将其应用于不同的向量,例如
vec = [("A", "B"), ("A", "C"), ("A", "D"), ("B", "C"), ("R", "E"),...]
尝试:
using StatsBase
function count_occurrences(v)
d = countmap(Iterators.flatten(v))
return [getindex.(Ref(d), p) for p in v]
end
例如,对于问题中的数据:
julia> v = [("A", "B"), ("A", "C"), ("A", "D"), ("B", "C"), ("B", "D")]
5-element Vector{Tuple{String, String}}:
("A", "B")
("A", "C")
("A", "D")
("B", "C")
("B", "D")
julia> count_occurrences(v)
5-element Vector{Tuple{Int64, Int64}}:
(3, 3)
(3, 2)
(3, 2)
(3, 2)
(3, 2)