【问题标题】:Creating multiple combination arrangements创建多种组合安排
【发布时间】:2018-03-08 17:32:03
【问题描述】:

首先,我是 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                  

【问题讨论】:

  • FirstSecond 组合是什么意思?一组不应该返回所有组合吗?
  • 是的,我只是列出了示例的可能组合,但我的意思是所有组合

标签: r combinations


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多