r-比较并计数两列中条目对的频率

  • 本文关键字:两列 频率 比较 r compare
  • 更新时间 :
  • 英文 :


矩阵中有两列(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")

但这不会产生所需的结果!

使用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")之后停止,因为这会给出非常有用的结果,很容易进行子集连接等等。

我们也可以使用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

相关内容

  • 没有找到相关文章

最新更新