计算按列值链接的项目对

Har*_*mer 5 r aggregation

我在R中努力解决这个问题.我有这样的数据:

item   id
1      500
2      500
2      600
2      700
3      500
3      600

data.frame(item = c(1, 2, 2, 2, 3, 3),
           id = c(500, 500, 600, 700, 500, 600))
Run Code Online (Sandbox Code Playgroud)

我想计算一对项链接到同一个id的次数.所以我想要这个输出:

item1    item2    count
    1        2        1
    2        3        2
    1        3        2
Run Code Online (Sandbox Code Playgroud)

我试过用以下命令来解决这个问题:

x_agg = aggregate(x, by=list(x$id), c)
Run Code Online (Sandbox Code Playgroud)

然后

x_agg_id = lapply(x_agg$item, unique)
Run Code Online (Sandbox Code Playgroud)

以为我可以计算每个项目的出现次数.但该by函数似乎创建了一个列表对象,我不知道如何操作.我希望有一个更简单的方法....

use*_*1_G 3

# your data
df<-read.table(text="item   id
1      500
2      500
2      600
2      700
3      500
3      600",header=TRUE)


library(tnet)
item_item<-projecting_tm(df, method="sum")
names(item_item)<-c("item1","item2","count")

item_item

  #item1 item2 count
#1     1     2     1
#2     1     3     1
#3     2     1     1
#4     2     3     2
#5     3     1     1
#6     3     2     2
Run Code Online (Sandbox Code Playgroud)

编辑

你有多少个 ID 和物品?你总是可以重命名事物。例如

numberitems<-length(unique(df$id))+9000
items<-data.frame(item=unique(df$item),newitems=c(9000:(numberitems-1)))
numberids<-length(unique(df$id))+1000
ids<-data.frame(id=unique(df$id),newids=c(1000:(numberids-1)))
newdf<-merge(df,items,by="item")
newdf<-merge(newdf,ids,by="id")
DF<-data.frame(item=newdf$newitems,id=newdf$newids)

library(tnet)
item_item<-projecting_tm(DF, method="sum")
names(item_item)<-c("item1","item2","count")
Run Code Online (Sandbox Code Playgroud)

然后合并回原来的名字......