2017-04-17 11 views
-1

この非常に面白いチュートリアル(https://rpubs.com/hrbrmstr/customer-segmentation-r)に従っている間、私は本当に理解していないエラーに出くわしました。クラスタ計算チュートリアル - 広がりに関する問題

「Error:Value column 'n'が入力に存在しません」というメッセージが表示されます。 in 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 

最後の行が問題を引き起こす行です。

誰でも知っているだろうか?

+1

一般的に、数年以内に壊れやすいリンクを使用するのではなく、再現可能な例をここに掲載する必要があります。いくつかのガイダンス:http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/28481250#28481250もちろん、Rを超えて使用しているツール自体。 'spread'はRのものではありません – Frank

+0

確かに、私の悪い、私は再現可能な例で元の投稿を修正しました – Romain

+0

ありがとう。データ用のブログが必要な場合は、長期的に再現性がありません。おそらくdplyrだけが必要な場合は、これらすべてのパッケージをロードしている場合、最小限ではありません。理想は[mcve]です。とにかく、 'count'ステップが' n'という名前のカラムを作るかどうかを見て、あなた自身でこれをデバッグすることができます。 – Frank

答えて

0

?dplyr::countのマニュアルページを見ていてください:

Note

The column name in the returned data is usually n, even if you have supplied a weight.

If the data already already has a column named n, the output column will be called nn. If the table already has columns called n and nn then the column returned will be nnn, and so on.

この場合は、元のデータはすでにnという列を持っているので、count後の新しい列がnnと呼ばれることになります。したがって、spread(offer_id, n) %>%spread(offer_id, nn) %>%に変更する必要があります。そのチュートリアルは、この変更の前に書かれているかもしれません。