You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将R语言中DataFrame存储的图数据转换为指定格式的文本文件并生成图ID映射表

解决图数据转换与映射表生成问题

我来帮你搞定把图数据转换成指定文本格式,同时生成t与object映射表的需求,咱们从原始的node和edge DataFrame入手处理,步骤清晰又直观:

1. 生成t与object的映射表

首先咱们先创建映射表,把唯一的object按顺序分配从0开始的t值:

# 提取唯一的object并排序(保证顺序稳定)
unique_objects <- unique(sort(node$object))
# 创建映射表
mapping_df <- data.frame(
  t = 0:(length(unique_objects)-1),
  object = unique_objects
)

这样生成的mapping_df就完全符合你需要的格式啦,和你给出的示例结果一致。

2. 转换为目标文本格式

接下来咱们把每个图的数据转换成指定的文本格式,核心是把节点的id从1起始转换成0起始,然后按规则拼接每行内容:

# 初始化存储所有图文本的列表
graph_text_list <- list()

# 遍历每个唯一的object
for (i in seq_along(unique_objects)) {
  current_obj <- unique_objects[i]
  current_t <- i - 1 # t从0开始
  
  # 提取当前图的节点和边数据
  current_nodes <- node[node$object == current_obj, ]
  current_edges <- edge[edge$object == current_obj, ]
  
  # 节点id映射:原id(1-7)转成0-6
  node_id_mapping <- setNames(0:(nrow(current_nodes)-1), current_nodes$id)
  
  # 生成节点行:v 新id func
  node_lines <- paste0("v ", node_id_mapping[current_nodes$id], " ", current_nodes$func)
  
  # 生成边行:e 新from 新to func
  edge_lines <- paste0("e ", node_id_mapping[current_edges$from], " ", node_id_mapping[current_edges$to], " ", current_edges$func)
  
  # 组合当前图的所有行,开头加上t标识
  current_graph_text <- c(
    paste0("t # ", current_t),
    node_lines,
    edge_lines
  )
  
  # 加入列表
  graph_text_list[[i]] <- current_graph_text
}

# 把所有图的文本合并成一个向量
final_text <- unlist(graph_text_list)

3. 导出为txt文件

最后把生成的文本导出到txt文件:

# 写入文件,每行一个元素
writeLines(final_text, "graph_output.txt")

完整代码示例

把所有步骤整合在一起,包括你提供的准备数据代码:

# 准备数据
node <- data.frame(object=c("2-1887","2-1887","2-1887","2-1887","2-1887","2-1887","2-1887","4-1889","4-1889","4-1889","4-1889","4-1889","4-1889","4-1889"), id=c(1,2,3,4,5,6,7,1,2,3,4,5,6,7), func=c(6,18,18,3,19,18,11,6,18,19,18,18,18,20))
edge <- data.frame(object=c("2-1887","2-1887","2-1887","2-1887","2-1887","2-1887","2-1887","4-1889","4-1889","4-1889","4-1889","4-1889","4-1889","4-1889"), from=c(1,2,3,3,4,5,6,1,2,2,3,4,5,6), to=c(2,3,4,6,6,6,7,2,3,4,4,5,6,7), func=c(1,1,2,2,2,2,1,1,2,2,2,1,1,1))

# 生成映射表
unique_objects <- unique(sort(node$object))
mapping_df <- data.frame(
  t = 0:(length(unique_objects)-1),
  object = unique_objects
)

# 转换为目标文本格式
graph_text_list <- list()
for (i in seq_along(unique_objects)) {
  current_obj <- unique_objects[i]
  current_t <- i - 1
  
  current_nodes <- node[node$object == current_obj, ]
  current_edges <- edge[edge$object == current_obj, ]
  
  node_id_mapping <- setNames(0:(nrow(current_nodes)-1), current_nodes$id)
  
  node_lines <- paste0("v ", node_id_mapping[current_nodes$id], " ", current_nodes$func)
  edge_lines <- paste0("e ", node_id_mapping[current_edges$from], " ", node_id_mapping[current_edges$to], " ", current_edges$func)
  
  current_graph_text <- c(
    paste0("t # ", current_t),
    node_lines,
    edge_lines
  )
  
  graph_text_list[[i]] <- current_graph_text
}
final_text <- unlist(graph_text_list)

# 导出txt文件
writeLines(final_text, "graph_output.txt")

运行这段代码后,你会得到:

  • mapping_df:符合要求的t与object映射DataFrame
  • graph_output.txt:完全匹配你给出示例格式的文本文件

内容的提问来源于stack exchange,提问作者HSJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 22:52:50