创建多种组合安排

时间:2018-03-08 17:32:03

标签: r combinations

首先,我是R的新手。我有一个由以下内容组成的数据集:

  • 不同的人(p1,p2,p3,p4)
  • 每个人拥有特定项目(A,B,C,D,E)
  • 每个人也有一个他们希望的项目(A,B,C,D,E)可能与他们得到的项目相同或不同。

我摆脱了那些拥有他们想要的物品的人。我想创建一个脚本,可以安排必须在所有人之间进行的交易,以便每个人都能获得他们想要的东西。问题是,也许并非所有人都能得到他们想要的东西,如果一个人没有得到他/她的意愿,他/她就不会交易他/她所拥有的东西。

我想创建所有可能的组合。

实施例

have    person  want    
A       P1      B    
B       P2      C    
D       P3      A    
D       P4      A    
C       P5      D

第一次组合

Person Giving     P1  P2  P5  P3  

Person Receiving  P3  P1  P2  P5    

Item Exchanged     A   B   C   D   

第二次组合

Person Giving     P1  P2  P5  P4  

Person Receiving  P4  P1  P2  P5    

Item Exchanged    A   B   C   D                  

1 个答案:

答案 0 :(得分:1)

考虑使用子集merge加入自身的子集以避免同一个人,并在配对之间匹配 想要

数据

txt = 'have    person  want    
A       P1      B    
B       P2      C    
D       P3      A    
D       P4      A    
C       P5      D'

df <- read.table(text=txt, header=TRUE)

合并/子集

df$key <- 1
all_comb_df <- subset(merge(df, df, by="key", suffixes=c("", "_")), 
                      (person != person_) & (have == want_))[c("person","person_","have")]

rownames(all_comb_df) <- NULL
colnames(all_comb_df) <- c("PersonGiving", "PersonReceiving", "ItemExchanged")

all_comb_df

#   PersonGiving PersonReceiving ItemExchanged
# 1           P1              P3             A
# 2           P1              P4             A
# 3           P2              P1             B
# 4           P3              P5             D
# 5           P4              P5             D
# 6           P5              P2             C