2017-02-02 20 views
1

我试着按这个数据使得函数依赖于两个变量匹配合适的人选 - R的

girlfriend = c('Sue','Julie','Lora','Lora','Julie') 
boyfriend = c('Sam','John','Peter','Chris','Sam') 
goodfeeling = c(88, 78, 63,  51, 40) 
couple = data.frame(girlfriend,boyfriend,goodfeeling) 

通过上面的数据做出couplemaker功能,我想最好的男孩匹配的女孩。

A = 'Julie (Sam|John|Peter)' 

A 
[1] 'Julie (John)' 

为了对付这个字符串,下面的代码是如此usful。

gsubfn("\\(([^)]+)", ~paste0("(", paste(couplemaker(unlist(x)), collapse="|")), A) 

但是,重要的功能是couplemaker()我应该做的。

couplemaker = function(A){couple$boyfriend[which.max(couple$goodfeeling*(couple$boyfriend %in% A))]} 

这段代码选择了一个有着最好的感觉但没有与女朋友对应的男朋友。

为了使我的目的更清晰,这些是我打算制作的理想套件。

Paris = 'Sue (Peter|Sam|Chris)' 
US = 'Lora (Peter|Chris|Sam)' 

Paris 
[1] 'Sue (Sam)' 
US 
[1] 'Lora (Peter)' 

回答

1

这会是一个足够的解决方法吗? group_by女朋友,然后获得最佳的对,然后paste

library(dplyr) 
do.call(paste,couple %>% group_by(girlfriend) %>% 
         summarise(boyfriend[which.max(goodfeeling)]) 
) 

library(data.table) 
do.call(paste, couple[, boyfriend[which.max(goodfeeling)], by = .(girlfriend)]) 

# [1] "Julie John" "Lora Peter" "Sue Sam" 
+1

那么,我的目标是做的是在一个字符串中删除不太有希望的候选人。 – Rcoding

+0

@编码是的,但这也是其他方式正确吗? Ryt! –

+0

Ryt!辉煌的方式来分组夫妇虽然。 – Rcoding

相关问题