【问题标题】:Compare and count the frequency of pairs of entries in two columns比较并计算两列中条目对的频率
【发布时间】:2020-11-15 16:59:10
【问题描述】:

我在一个矩阵中有两列 (v5 & v6),其中两列都有 05 之间的条目

head(matrix)
       v1 v2  ...  v5     v6
[1,]               0      5
[2,]               1      3
[3,]               2      1
[4,]               4      1
[5,]               2      2

我想构造一个新的(6*6)矩阵,包含两列中每对值的出现次数为

new_matrix
 
    0      1    2    3    4   5
0  2326  2882  2587 734  341  0
1   50  17  103 14  0   6
2     ......
3     .......
4     ......
5     .......

我的意思是我想知道两列中有多少对(0,0) , (0,1), ..., (0,5),... (5,5)

我用library(plyr)作为

freq <- ddply(matrix, .(matrix$v5, matrix$v6), nrow)
names(freq) <- c("v5", "v6", "Freq")

但这不会给出所需的结果!

【问题讨论】:

  • table(matrix$v5, matrix$v6)

标签: r compare


【解决方案1】:

使用tidyverse,您可以使用通常的group_by 操作获得此答案。

样本数据

我正在创建列名,以便更轻松地转换为 tibble

set.seed(123)
M <- matrix(sample(0:5, 100, TRUE),
            sample(0:5, 100, TRUE),
            ncol = 2,
            nrow = 100,
            dimnames = list(NULL, c("colA", "colB")))

解决方案

library("tidyverse") 

as_tibble(M) %>% 
    arrange(colA, colB) %>% 
    group_by(colA, colB) %>% 
    summarise(num_pairs = n(), .groups = "drop") %>% 
    pivot_wider(names_from = colB, values_from = num_pairs) %>% 
    remove_rownames() 

预览

# A tibble: 6 x 7
   colA   `0`   `1`   `2`   `4`   `5`   `3`
  <int> <int> <int> <int> <int> <int> <int>
1     0     4     4     4     2     4    NA
2     1     2     2     4     6     2    NA
3     2     6     4    NA     2     6    NA
4     3     2    NA    NA     4     6     2
5     4    NA     2     6    NA     2     4
6     5     6     2     4     4     2     2

评论

你问过:

我的意思是我想知道有多少对 (0,0) , (0,1), ..., (0,5),... (5,5) 在两列中?

这个答案告诉您,问题是将结果存储为矩阵对您来说有多重要?您可以使用as.matrix 将结果进一步转换为矩阵。很可能,我会在 summarise(num_pairs = n(), .groups = "drop") 之后停下来,因为这会提供非常有用的结果,易于子集连接等等。

【讨论】:

    【解决方案2】:

    我们也可以使用table

    table(as.data.frame(M))
    

    -输出

    # colB
    #colA 0 1 2 3 4 5
    #   0 4 4 4 0 2 4
    #   1 2 2 4 0 6 2
    #   2 6 4 0 0 2 6
    #   3 2 0 0 2 4 6
    #   4 0 2 6 4 0 2
    #   5 6 2 4 2 4 2
    

    【讨论】:

      猜你喜欢
      • 2017-02-25
      • 1970-01-01
      • 1970-01-01
      • 2021-05-18
      • 1970-01-01
      • 2021-10-03
      • 1970-01-01
      • 2022-11-23
      相关资源
      最近更新 更多