r - 计算 R 数据框中的唯一行组合
问题描述
我有一个原始数据框,它在第一列中包含一个唯一值,后面有 X(没有最小值或最大值)行,其中包含与第一列中唯一值有关的值。我正在寻找第 2-inf 列中唯一值对的数量。对于每一行。数据看起来像下面的数据框,但规模更大。例如,“w”和“x”在同一行出现了 4 次(第 1、3、5、7 行),“y”和“z”在同一行出现了两次(1、6)。我想计算所有行的唯一对数。
x$`Order ID` 1 2 3 4 5
1 1 w x y z <NA>
2 2 x y <NA> <NA> <NA>
3 3 u v w x y
4 4 w <NA> <NA> <NA> <NA>
5 5 w x y <NA> <NA>
6 6 y z <NA> <NA> <NA>
7 7 t u v w x
我试图首先使用 data.table 库中的 setDT() 来计算一般唯一行的数量,然后将其分解为行内的唯一值对,但得到一个错误,即行不相等(因为它们不相等)。我不太精通 R,但想知道可以使用什么函数来做到这一点。谢谢你。
编辑:我还尝试了 plyr 库中的 count() 函数。这是在正确的轨道上,但只计算整个唯一行,而不是行中的单个唯一对。
library(plyr)
count(transposed[, -1])
X1 X2 X3 X4 X5 freq
1 t u v w x 1
2 u v w x y 1
3 w x y z <NA> 1
4 w x y <NA> <NA> 1
5 w <NA> <NA> <NA> <NA> 1
6 x y <NA> <NA> <NA> 1
7 y z <NA> <NA> <NA> 1
编辑2:
此数据子集的所需输出:
Pair Frequency
1 tu 1
2 tv 1
3 tw 1
4 tx 1
5 uv 2
6 uw 2
7 ux 2
8 uy 1
9 vw 2
10 vx 2
11 vy 1
12 wx 4
13 wy 3
14 wz 1
15 xy 4
16 xz 1
17 yz 2
计算每行中不同的 2 对组合的数量,然后计算这些组合在整个数据集中出现的次数。顺序无关紧要 (xy = yx)。
解决方案
尝试这个,
combs <- t(combn(sort(na.omit(unique(unlist(dat[,-1])))), 2))
head(combs, n=7)
# [,1] [,2]
# [1,] "t" "u"
# [2,] "t" "v"
# [3,] "t" "w"
# [4,] "t" "x"
# [5,] "t" "y"
# [6,] "t" "z"
# [7,] "u" "v"
freqs <- apply(combs, 1, function(C) {
sum(apply(dat[,-1], 1, function(a) all(C %in% a, na.rm = TRUE)))
})
combsDF <- as.data.frame(combs)
combsDF$freq <- freqs
combsDF
# V1 V2 freq
# 1 t u 1
# 2 t v 1
# 3 t w 1
# 4 t x 1
# 5 t y 0
# 6 t z 0
# 7 u v 2
# 8 u w 2
# 9 u x 2
# 10 u y 1
# 11 u z 0
# 12 v w 2
# 13 v x 2
# 14 v y 1
# 15 v z 0
# 16 w x 4
# 17 w y 3
# 18 w z 1
# 19 x y 4
# 20 x z 1
# 21 y z 2
如果您只想要具有正匹配的行,那么
combsDF[ combsDF$freq > 0, ]
# V1 V2 freq
# 1 t u 1
# 2 t v 1
# 3 t w 1
# 4 t x 1
# 7 u v 2
# 8 u w 2
# 9 u x 2
# 10 u y 1
# 12 v w 2
# 13 v x 2
# 14 v y 1
# 16 w x 4
# 17 w y 3
# 18 w z 1
# 19 x y 4
# 20 x z 1
# 21 y z 2
这很可能很容易扩展到包括不仅仅是“2”组合。
推荐阅读
- c# - C# 存储和输出字符串列表的最佳方式
- angular - 翻译角度分页文本(上一个 - 下一个)
- c++ - 将向量大小连接到字符串
- mysql - 获取长文本mysql的日期名称
- ios - 登录 SFAuthenticationSession 然后在 SFSafariViewController 中打开一个执行 SSO 的链接
- python - Django“用户”对象没有属性“目标”
- visual-studio - Visual Studio 中是否有任何 UI 工具可以编辑 MSBuild 条件构造?
- javascript - 为什么这个密钥处理程序在没有警报的情况下不能工作?
- c - 如何将单链表更改为双向链表?
- java - 我没有执行任何操作,但仍然显示无法关闭连接,而事务仍处于活动状态