我在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函数似乎创建了一个列表对象,我不知道如何操作.我希望有一个更简单的方法....
# 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)
然后合并回原来的名字......