讓我們考慮這個數據集,其中第一場是單號,第二個是產品的名稱:創建多行
df=data.frame(bill=c(1,1,1,1,2,2,2,2,3,3),product=c("A","B","C","B","A","C","E","D","C","D"))
我想算號含在這種情況下兩種產品的每一種組合,例如賬單這樣的結果(我不想讓這些組合中計數爲0):
# prod1 prod2 count
# A B 1
# A C 2
# A D 1
# A E 1
# B C 1
# C D 2
# C E 1
# D E 1
我有一個循環的解決方案,但它真的不是漂亮(而且慢!):
products=sort(unique(df$product))
bills_list=list()
for (i in 1:length(products)){
bills_list[[i]]=unique(df[which(df$product==products[i]),"bill"])
}
df2=data.frame(prod1=character(0),prod2=character(0),count=numeric(0))
for (i in 1:(length(products)-1)){
for (j in (i+1):length(products)){
Nij=length(intersect(bills_list[[i]],bills_list[[j]]))
if (Nij>0){
temp=data.frame(prod1=products[i],prod2=products[j],count=Nij)
df2=rbind(df2,temp)
}
}
}
有沒有辦法做到這一點沒有循環? 謝謝你的時間。
+1比我的回答更優雅! –
完美!謝謝 ! – fmarm