0

我的数据框看起来像这样。

Word1    Word2    Count
--------------------------
 a         b        4

 c         a        2

 b         c        1
-------------------------

我想要以下结果。

from      to    count
-----------------------
  1       3       4

  2       1       2

  3       2       1

----------------------

我知道我可以使用 as_tbl_graph(df) 轻松实现这一点。但我希望这个结果只使用基本 r 代码而不使用其他包。如何在不使用 igraph、ggraph、tidyverse 等其他软件包的情况下创建相同的结果...?

4

1 回答 1

0

您可以将值转换为factor然后整数来完成:

lvls <- unique(df$Word1)                    # first we create an object containing the levels found in Word1

df$Word1 <- factor(df$Word1, levels = lvls) # Using this we convert both columns to factor
df$Word2 <- factor(df$Word2, levels = lvls)

df$Word1 <- as.integer(df$Word1)            # When converting this to integer, only level IDs are kept
df$Word2 <- as.integer(df$Word2)

df
#>   Word1 Word2 Count
#> 1     1     3     4
#> 2     2     1     2
#> 3     3     2     1

igraph等中,tidygraph您还保留一个data.frame由级别名称(即节点描述)组成的秒。我们可以从之前保存的关卡中创建它:

df_nodes <- data.frame(names = lvls, stringsAsFactors = FALSE)
df_nodes
#>   names
#> 1     a
#> 2     c
#> 3     b

数据

df <- read.csv(text = "Word1,Word2,Count
a,b,4
c,a,2
b,c,1", stringsAsFactors = FALSE)
于 2019-12-01T16:08:40.777 回答