【问题标题】:How to count number of occurrences of data combinations and save in a matrix in R?如何计算数据组合的出现次数并保存在R中的矩阵中?
【发布时间】:2020-10-15 16:53:19
【问题描述】:

我有一个问题,我尝试创建一个包含特定“坐标”出现次数的矩阵。我在 R 工作。

为了说明,这是我的(部分)数据:

pre = c(3,1,3,2,2,4,3,5,3,4,6,5,6,5,4,5,6,6,5,6,5,7,6,7,7,7,4,8,4,8,8,4,4,8,3,9,8,6,9,8)
post = c(4,3,5,3,4,6,5,6,5,4,5,6,6,5,6,5,7,6,7,7,7,4,8,4,8,8,4,4,8,3,9,8,6,9,8,8,9,7,9,9)
df = data.frame(pre,post)

然后我用可能的坐标维度定义这个输出矩阵(所有数据的范围是 1-20):

matrix = matrix(NA, nrow=20, ncol=20)
colnames(matrix) = seq(1,20,1)
rownames(matrix) = seq(1,20,1)

然后我需要一个循环来遍历我的数据并存储数据中存在多少特定的前后组合:

for (i in 1:40){matrix[df$post[i], df$pre[i]] = 1}

这就像输出现在显示数据中出现了哪些“坐标”一样,但它没有说明出现了多少次。 例如,我知道 pre=4, post=4 发生了两次。 因此循环需要记住已经发生的组合并需要再添加一个1,但我不知道如何编程。

希望有人能帮忙 安妮

【问题讨论】:

    标签: r loops matrix


    【解决方案1】:

    您可以用零而不是NA 来初始化矩阵,然后像这样增加矩阵值:

    pre = c(3,1,3,2,2,4,3,5,3,4,6,5,6,5,4,5,6,6,5,6,5,7,6,7,7,7,4,8,4,8,8,4,4,8,3,9,8,6,9,8)
    post = c(4,3,5,3,4,6,5,6,5,4,5,6,6,5,6,5,7,6,7,7,7,4,8,4,8,8,4,4,8,3,9,8,6,9,8,8,9,7,9,9)
    df = data.frame(pre,post)
    
    matrix = matrix(0, nrow=20, ncol=20)
    colnames(matrix) = seq(1,20,1)
    rownames(matrix) = seq(1,20,1)
    
    for (i in 1:40){matrix[df$post[i], df$pre[i]] = matrix[df$post[i], df$pre[i]] + 1}
    

    顺便说一下,矩阵colnamesrownames的设置,如果其他原因不需要的话,就不需要了。

    【讨论】:

    • 非常感谢您!它确实有效。我还有一个问题。在整个数据集中,也会出现零。 R 定义从 1 开始的行/列,因此使用 matrix = matrix(0, nrow=21, ncol=21) 不能解决问题。您对如何处理这个问题有什么建议吗?
    • 我成功地解决了这个问题。我已将数据集中的所有原始零更改为 21,然后将矩阵设置为 21 行和 21 列。循环后,我将第 21 行和第 21 列(它实际上描绘了我的数据中的零组合)作为矩阵中的第一行和第一列 (matrix2 = matrix[c(21, 1:20), c(21, 1:20)])。然后将列和行从 0 重命名为 20。
    【解决方案2】:

    我们可以使用table 来执行此操作。将'pre','post'列转换为factorlevels指定为1到20,然后使用table

    table(factor(df$pre, levels = 1:20), factor(df$post, levels = 1:20))
    

    如果我们使用已经创建的“矩阵”,则选项是

    out <- as.data.frame(table(df))
    matrix[as.matrix(out[1:2])] <- out$Freq
    

    【讨论】:

      猜你喜欢
      • 2020-11-08
      • 2022-01-25
      • 2013-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多