首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表列关联频率计数

表列关联频率计数
EN

Stack Overflow用户
提问于 2014-05-22 20:34:04
回答 2查看 45关注 0票数 1

我有如下格式的数据:

代码语言:javascript
复制
User Item
1   A
1   B
1   C
1   D
2   A
2   C
2   E

我想得到的是每对的频率计数。秩序并不重要,所以我不想计算反比。我想得到一个类似于此的结果,其中频率计数是由用户划分的。

代码语言:javascript
复制
Pair Frequency
AB  1
AC  2
AD  1
AE  1
BC  1
BD  1
BE  0
CD  1
CE  1

我能用什么工具来编制这种表格呢?如果可能的话,我更喜欢一些开源的解决方案。

编辑-为我在下面的评论添加了示例

我正在使用以下两行读取CSV文件中的数据,并在代码中使用这两个步骤删除这些因素。

代码语言:javascript
复制
xa<-read.csv("C:/Direcotry/MyData.csv")
xa<-data.frame(lapply(xa, as.character), stringsAsFactors=FALSE)

     User   Item
1  394324 Item A
2  124209 Item B
3  212457 Item C
4  427052 Item A
5  118281 Item D
6  156831 Item A
7  212442 Item E
8  156831 Item B
9  212442 Item A
10 177734 Item C

当我尝试运行建议的答案时,我会得到一个错误的结果:

代码语言:javascript
复制
Error in combn(x, 2) : n < m
EN

回答 2

Stack Overflow用户

发布于 2014-05-23 05:24:40

嗯,R是开源的。

下面是一个基于您的微小数据样本的示例:

在这里,我只是通过直接从你的帖子中复制数据来读取你的数据:

代码语言:javascript
复制
> xa=read.table(stdin(),header=TRUE,as.is=TRUE)
0: User Item
1: 1   A
2: 1   B
3: 1   C
4: 1   D
5: 2   A
6: 2   C
7: 2   E
8: 

这就是我们的数据。然后用几行代码:

代码语言:javascript
复制
> f=function(x) apply(combn(x,2),2,paste0,collapse="")
> table(unlist(tapply(xa$Item,xa$User,f)))

AB AC AD AE BC BD CD CE 
 1  2  1  1  1  1  1  1 

如果需要将所有空组合显式为零,则需要另一行或两行(您需要生成所有可能的组合作为一个因素,而不仅仅是观察到的组合,并告诉table包含空的组合)。

票数 4
EN

Stack Overflow用户

发布于 2014-05-23 18:51:36

在Glen的一些研究和建议之后,我想出了下面的代码,它为我提供了一个3列CSV文件,其中包含一对组合加上频率计数。如果有人看到更好的方法,请告诉我!但这似乎奏效了。

我在后续评论中提到的错误是由用户只在一个地点购买造成的。

代码语言:javascript
复制
library(reshape2)

xa<-read.csv("C:/Input.csv",as.is=TRUE)

xa=xa[!duplicated(xa),]
xa<-data.table(xa)
setkey(xa,ContactId,PurchaseLocation)

tab=table(xa$ContactId)
xa=xa[xa$ContactId %in% names(tab[tab>1]),]

f=function(x) apply(combn(x,2),2,paste0,collapse="--")
xb<-as.data.frame(table(unlist(tapply(xa$PurchaseLocation,xa$ContactId,f))))
xc=with(xb, cbind(Freq, colsplit(xb$Var1, pattern = "--", names = c('a', 'b'))))
xc=subset(xc,a!=b & a!="" & b!="" & Freq>1)

write.csv(xc,file="C:/Output.csv")

编辑--我做了一个小小的修改,通过对键上的数据表进行排序,使它的顺序独立。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23836764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档