我正在寻找有关如何根据训练数据集中已发现的模式将分数附加到相同数据的新数据集的帮助。我想要做的例子(从我的另一篇文章中获取):
这是一个示例数据集,它输出一些假的在线购物者数据的方法。
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中的列?
答案 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。