如何基于另一个data.frame对data.frame进行评分?

时间:2014-04-16 15:57:19

标签: r

我正在寻找有关如何根据训练数据集中已发现的模式将分数附加到相同数据的新数据集的帮助。我想要做的例子(从我的另一篇文章中获取):

这是一个示例数据集,它输出一些假的在线购物者数据的方法。

require(magrittr)
require(dplyr)    

set.seed(123)
dat = data.frame(email=sample(c("yahoo", "gmail"), 10000, replace=T),
                 browser=sample(c("mozilla", "ie"), 10000, replace=T),
                 country=sample(c("usa", "canada"), 10000, replace=T),
                 money=runif(10000))  
dat.withmean <- dat %>%
  group_by(email, browser, country) %>%
  summarize(mean = mean(money))

# email browser country      mean
# 1 gmail      ie  canada 0.5172424
# 2 gmail      ie     usa 0.4921908
# 3 gmail mozilla  canada 0.4934892
# 4 gmail mozilla     usa 0.4993923
# 5 yahoo      ie  canada 0.5013214
# 6 yahoo      ie     usa 0.5098280
# 7 yahoo mozilla  canada 0.4985357
# 8 yahoo mozilla     usa 0.4919743

现在,我们假设我们有一个新的数据集,如下所示:

newdat = data.frame(email=sample(c("yahoo", "gmail"), 10000, replace=T),
                 browser=sample(c("mozilla", "ie"), 10000, replace=T),
                 country=sample(c("usa", "canada"), 10000, replace=T)) 

head(newdat, n=10)

#   email browser country
#1  gmail      ie     usa
#2  gmail      ie     usa
#3  gmail mozilla  canada
#4  yahoo mozilla  canada
#5  gmail      ie  canada
#6  yahoo mozilla  canada
#7  yahoo mozilla  canada
#8  gmail      ie     usa
#9  yahoo mozilla  canada
#10 gmail mozilla  canada
#... 10,000 rows...

如何循环遍历newdat并检查newdat中列的任何组合是否与来自dat的任何行匹配,然后是否确实执行类似于附加&#34;中的值的操作&#34; dat中的列?

2 个答案:

答案 0 :(得分:1)

这样做

dat.withmean <- dat %>%
               group_by(email, browser, country) %>%
               summarize(mean = mean(money))

现在我们使用合并,这将&#34;追加&#34;或者为每个组合添加一个名为mean的列

newdat.withmean <- merge(newdat,dat.withmean) #by default, data.frames are merged on the columns they both have. 

阅读?merge了解更多详情

答案 1 :(得分:1)

你甚至不需要临时变量:

result <-     
  dat %>%
  group_by(email, browser, country) %>%
  summarize(mean = mean(money)) %>%
  merge(newdat)

你可能想要使用dplyr&#39; s *函数系列来进行speeed。