首先,我是R的新手。我有一个由以下内容组成的数据集:
我摆脱了那些拥有他们想要的物品的人。我想创建一个脚本,可以安排必须在所有人之间进行的交易,以便每个人都能获得他们想要的东西。问题是,也许并非所有人都能得到他们想要的东西,如果一个人没有得到他/她的意愿,他/她就不会交易他/她所拥有的东西。
我想创建所有可能的组合。
实施例
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
答案 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