在关注这个非常有趣的教程(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
最后一行是创建问题的那一行。
任何人都知道为什么?
答案 0 :(得分:0)
请查看?dplyr::count
的手册页:
请注意
返回数据中的列名通常为n,即使您有 提供了一个重量。
如果数据已经有一个名为n的列,则为输出列 将被称为 nn 。如果表已经有名为n和nn的列 然后返回的列将是nnn,依此类推。
在这种情况下,原始数据已经有一个名为n
的列,因此count
之后的新列将被称为nn
。因此,您必须将spread(offer_id, n) %>%
更改为spread(offer_id, nn) %>%
。可能会在此更改之前编写该教程。