-1

在遵循这个非常有趣的教程(https://rpubs.com/hrbrmstr/customer-segmentation-r)时,我遇到了一个我不太明白的错误。

这是导致消息“错误:输入中不存在值列'n'”的代码段。在 Rstudio 1.0.136 中:

library(readxl)
library(dplyr)
library(tidyr)
library(viridis)
library(ggplot2)
library(ggfortify)

url <- "http://blog.yhathq.com/static/misc/data/WineKMC.xlsx"
fil <- basename(url)
if (!file.exists(fil)) download.file(url, fil)

offers <- read_excel(fil, sheet = 1)
colnames(offers) <- c("offer_id", "campaign", "varietal", "min_qty", "discount", "origin", "past_peak")
head(offers, 12)

transactions <- read_excel(fil, sheet = 2)
colnames(transactions) <- c("customer_name", "offer_id")
transactions$n <- 1
head(transactions)

left_join(offers, transactions, by="offer_id") %>% 
  count(customer_name, offer_id, wt=n) %>%
  spread(offer_id, n) %>%
  mutate_each(funs(ifelse(is.na(.), 0, .))) -> dat

最后一行是造成问题的行。

有人会知道为什么吗?

4

1 回答 1

0

请查看以下手册页?dplyr::count

笔记

返回数据中的列名通常为 n,即使您提供了权重。

如果数据已经有一个名为 n 的列,则输出列将被称为nn。如果表已经有名为 n 和 nn 的列,则返回的列将是 nnn,依此类推。

在这种情况下,原始数据已经有一个名为 的列,因此将调用n之后的新列。因此,您必须更改为. 该教程可能会在此更改之前编写。countnnspread(offer_id, n) %>%spread(offer_id, nn) %>%

于 2017-04-18T01:20:54.333 回答