如何解决每次在 R 中更新图形时如何计算组件的数量
我有以下数据:
data <- data.frame(name = c("A","A","B","C","D","E","C"),surname = c("aa","bb","cc","dd","hh","ee","ii","aa","qq","ff","gg","cc"))
这个数据产生一个连通图:
plot(graph_from_data_frame(data,directed = F))
显然有 1 个组件。
每次我们在图表中添加一行时,我想计算此数据产生的组件数量。例如,初始图将有 1 个分量,因为数据第一行中的顶点 A 和 aa 是相连的。下一个图形将再次有 1 个组件,因为我们添加了第二行并且因为名称列中的 A 值。当我们包含第四行 (B,dd) 时,该图将有 2 个分量。
for (i in 1:dim(data)[1]) {
data$number_of_components[i] <- components(graph_from_data_frame(data[1:i,],directed = F))$no}
有没有更聪明/更复杂的方法来获得这个?谢谢。
解决方法
你可以看看sapply()
。
dt$number_of_components <- sapply(seq_len(nrow(dt)),function(x) {
g <- graph_from_data_frame(dt[seq_len(x),],directed = FALSE)
components(g)$no
})
dt
# name surname number_of_components
# 1 A aa 1
# 2 A bb 1
# 3 A cc 1
# 4 B dd 2
# 5 B hh 2
# 6 C ee 3
# 7 D ii 4
# 8 D aa 3
# 9 D qq 3
# 10 D ff 3
# 11 E gg 4
# 12 B ff 3
# 13 C gg 2
# 14 C cc 1
,
您可以像下面这样尝试decompose
transform(
data,num_components = sapply(
seq_along(name),function(k) length(decompose(graph_from_data_frame(head(data,k),directed = FALSE)))
)
)
或
transform(
data,num_components = lengths(
sapply(
seq_along(name),function(k) decompose(graph_from_data_frame(head(data,directed = FALSE))
)
)
)
给出
name surname num_components
1 A aa 1
2 A bb 1
3 A cc 1
4 B dd 2
5 B hh 2
6 C ee 3
7 D ii 4
8 D aa 3
9 D qq 3
10 D ff 3
11 E gg 4
12 B ff 3
13 C gg 2
14 C cc 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。