【问题标题】:R - Count combinations of values across rows (to make a chord diagram)R - 计算跨行的值组合(制作和弦图)
【发布时间】:2021-09-11 21:40:33
【问题描述】:

这是我刚刚在此处发布的一个问题(提供上下文链接):R - Identify and remove duplicate rows based on two columns

接下来我需要做的是根据Text_ID 列计算值的组合。这是我的数据的示例:

Text_ID  Course_Code
39       MA3020
39       MA3120
59       MA3006
59       MA5902
89       MA2105
89       MA3006
89       MA5902
92       MA3023
92       MA3024
94       MA2023
94       MA3023
94       MA3024
97       MA3023
97       MA3024

需要明确的是,我要确定的是有多少次两个Course_Code 共享相同的Text_ID。我想有几种方法可以处理这个和/或呈现数据,但这就是它的外观(仅供参考 - 我正在尝试将这些数据放入一个允许我创建和弦图的结构中,显示之间的关系Course_Code):

From     To      Value
MA3020   MA3120  1
MA3006   MA5092  2
MA2105   MA3006  1
MA3023   MA3024  3
MA2023   MA3023  1

如您所见,MA3023 和 MA3024 具有最多的Text_ID 共同点 (3)。

这有点复杂(我认为),因为两个以上的课程代码可以共享一个Text_ID。例如。 Text_ID 89 和 94 都出现在三个或更多不同的Course_Code

希望这一切都清楚。如果没有,很高兴详细说明。最终,我的目标是将我的数据转换为一种格式/结构,使我能够使用Text_ID 作为共享值来可视化Course_Code 之间的关系。如果有其他方法可以解决这个问题,请随时提出建议:)

【问题讨论】:

    标签: r duplicates unique chord-diagram


    【解决方案1】:

    我们可能会使用

    subset(as.data.frame.table(crossprod(table(df1))), Freq != 0) 
    

    【讨论】:

      【解决方案2】:

      或者,这可以使用非等自连接来解决

      library(data.table)
      dt[, Course_Code := factor(Course_Code)]
      dt[dt, on = c("Text_ID", "Course_Code < Course_Code"), 
         .(Text_ID, From = x.Course_Code, To = i.Course_Code), nomatch = NULL][
           , .N, by = .(From, To)]
      
           From     To N
      1: MA3020 MA3120 1
      2: MA3006 MA5902 2
      3: MA2105 MA3006 1
      4: MA2105 MA5902 1
      5: MA3023 MA3024 3
      6: MA2023 MA3023 1
      7: MA2023 MA3024 1
      

      显然,这重现了 OP 的预期答案。

      akrun's answer 的区别在于它避免了重复计数以及自引用,即FromTo 相等。

      数据

      library(data.table)
      dt <- fread("Text_ID  Course_Code
      39       MA3020
      39       MA3120
      59       MA3006
      59       MA5902
      89       MA2105
      89       MA3006
      89       MA5902
      92       MA3023
      92       MA3024
      94       MA2023
      94       MA3023
      94       MA3024
      97       MA3023
      97       MA3024")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多