【问题标题】:Determine connectivity of data and separate into groups确定数据的连通性并分组
【发布时间】:2015-10-30 03:30:56
【问题描述】:

我有一个关于数据分组的简单问题。取数据框:

df <- data.frame(c(1,2,3,5,5),c(2,3,4,7,6))
colnames(df)<- c("A","B")
df
  A B
1 1 2
2 2 3
3 3 4
4 5 7
5 5 6

我想要做的是输出一些东西(表、列表、向量等),这些东西是通过基于元素之间的连接折叠原始数据框而创建的,所以理想的输出是:

1 2 3 4 
5 7 6 

我愿意接受有关处理此类数据的最佳方式的任何建议。

编辑: 澄清我是如何得到输出的:
行名被忽略。
1 与 2 位于同一行,组成一组:(1,2)
2 与 3 在同一行,因此 3 加入集合:(1,2,3)
4 与 3 在同一行,因此 4 加入集合:(1,2,3,4)
5 与 7 在同一行,并且这些都不在现有集合中,因此是新集合:(5,7)
5 与 6 在同一行,因此将 6 添加到集合中:(5,7,6)

【问题讨论】:

  • 你是怎么得到输出的?
  • 这是想要的输出
  • @RonakShah 询问连接元素的规则。

标签: r


【解决方案1】:

您可以将数据的网络图与 igraph 包一起使用。

library(igraph)
g <- graph.data.frame(df)
plot(g)

从图中我们可以看到g 图形的组成部分以及它们之间的关系。

这个包我用的不是很频繁,但是貌似获取组件的方式是使用get.vertex.attribute(),如下图。

lapply(decompose.graph(g), get.vertex.attribute, "name")
# [[1]]
# [1] "1" "2" "3" "4"
#
# [[2]]
# [1] "5" "7" "6"

【讨论】:

  • 嗯我认为这可以工作,但我得到一个错误 cmp
  • 我认为这真的很接近,因为图表显示并且这是元素的正确拆分,所以它只是访问网络的问题。
  • 还是不行。 “分解错误(g):时间序列没有或少于 2 个周期”
  • 啊,明白了,你在分解过程中遗漏了一点。这有效:lapply(decompose.graph(g), function(x) as.numeric(colnames(x[]))) 非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2018-02-27
  • 2020-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多