如何使用igraph链接以'a'开头的记录到'b'?

问题描述 投票:0回答:1

样本数据集如下:

var1 var2 var3
a 1 2
b 2 3

我想将 var1 = a 的记录链接到 var1 = b,如果 var1 = a = var3 of var1 = b 的 var2。

这样样本数据集就会变成这样:

var1 var2 var3
a 1 3

另外,如果 var1 =

b
之后的下一行也是
b
,那么该记录也将被链接, 例如:

var1 var2 var3
a 1 2
b 2 3
b 3 5
b 7 9
c 5 9

我想要的结果:

var1 var2 var3
a 1 5
b 7 9
c 5 9

有什么方法可以做到这一点吗?谢谢!

r dataframe tidyverse grouping igraph
1个回答
2
投票

我猜您正在以

连续
的方式从数据帧从上到下对节点(用var2var3表示)进行分组。如果该过程被一行中断,例如从第 3 行到第 4 行,那么您需要从新的组开始。


这是一个老式的基础 R 选项

f <- function(df) {
    res <- c()
    repeat {
        if (nrow(df) <= 1) {
            return(rbind(res, df))
        } else {
            for (k in 2:nrow(df)) {
                if (df$var2[k] == df$var3[k - 1]) {
                    df[k, c("var1", "var2")] <- df[k - 1, c("var1", "var2")]                } else {
                    res <- rbind(res, df[k - 1, ])
                    df <- tail(df, -(k - 1))
                    break
                }
            }
        }
    }
}

你将获得

> f(df)
  var1 var2 var3
3    a    1    5
4    b    7    9
5    c    5    9

数据

> dput(df)
structure(list(var1 = c("a", "b", "b", "b", "c"), var2 = c(1L,
2L, 3L, 7L, 5L), var3 = c(2L, 3L, 5L, 9L, 9L)), class = "data.frame", row.names = c(NA,
-5L))

> df
  var1 var2 var3
1    a    1    2
2    b    2    3
3    b    3    5
4    b    7    9
5    c    5    9
© www.soinside.com 2019 - 2024. All rights reserved.