r - 根据指向下一条记录的列对数据框进行排序

标签 r dataframe sorting sequence

我有一个数据框,其中有一列指向下一条记录,下面是示例数据框。

OG_Data <- data.frame(
  Record = c("aaaa", "NNNN", "rrrr", "tttt", "pppp", "ssss", "bbbb"),
  NextRecord = c("pppp", "tttt", "bbbb", "N/A" , "NNNN", "rrrr", "N/A") 
)
# Record NextRecord 
#   aaaa       pppp
#   NNNN       tttt       
#   rrrr       bbbb       
#   tttt        N/A        
#   pppp       NNNN       
#   ssss       rrrr       
#   bbbb        N/A        

我想根据 B 列 (NextRecord) 确定的预定义序列对该数据框进行排序,该序列指向下一条记录的 A 列 (Record) 以获得序列顺序和行组。

期望的输出:

# Record  NextRecord  Sequence  Line 
#   aaaa        pppp         1     1    
#   pppp        NNNN         2     1    
#   NNNN        tttt         3     1    
#   tttt         N/A         4     1    
#   ssss        rrrr         1     2    
#   rrrr        bbbb         2     2    
#   bbbb         N/A         3     2    

我在想这样的事情:

OG_Data[1,] %>%
  add_row(OG_Data, filter(OG_Data, OG_Data$Record == NextRecord))

但这行不通且不可扩展。另外,我不确定从哪里开始找到行组的开头。

最佳答案

我敢打赌有更简单的方法,但至少将其作为图形问题来处理会很有趣。

library(igraph)

g = delete_vertices(graph_from_data_frame(OG_Data), "N/A")
OG_Data$Line = components(g)$mem[OG_Data$Record]
OG_Data[order(OG_Data$Line, factor(OG_Data$Record, levels = names(topo_sort(g)))), ]

  Record NextRecord Line
1   aaaa       pppp    1
5   pppp       NNNN    1
2   NNNN       tttt    1
4   tttt        N/A    1
6   ssss       rrrr    2
3   rrrr       bbbb    2
7   bbbb        N/A    2

然后 Numbering rows within groups in a data frame


plot(g)

enter image description here


一个不太有效的尝试,为了记录:

g = graph_from_data_frame(OG_Data)
g2 = sapply(V(g)[degree(g, mode = 'in') == 0], all_simple_paths, graph = g, "N/A")
d2 = OG_Data[{x = unlist(g2); x[!endsWith(names(x), ".N/A")]},]
d2$Line = rep.int(seq_along(g2), lengths(g2) - 1)

关于r - 根据指向下一条记录的列对数据框进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73638783/

相关文章:

r - 在轴 2 和轴 3 上的 R 中的 NMDS 中使用 ordiellipse

arrays - 生成一个新变量,对 R 中一组列的行进行平均

R - 匹配两个数据框中的两列

r - 将数据框附加到 shapefile 并绘制它

python - 如何按类标签或任何特定列对 Pandas 数据框进行排序/分组

r - 将多个 glm 图导出为 PNG?

python - 在多索引 Pandas 中使用 groupby 添加列

Pandas:插入缺失的行数据并在组内使用条件进行迭代

python根据另一个列表的顺序根据属性对对象列表进行排序

algorithm - 删除元素以对数组进行排序