0

reshape2私は今、学習に時間を費やしましplyrたが、まだ理解できていません。今回は、(a) 小計と (b) 異なる集計関数を渡すことに問題があります。ここでは、mrdwabのブログのチュートリアルのデータを使用した例を示します

# libraries 
library(plyr)
library(reshape2)
# get data and add few more variables 
book.sales = read.csv("http://news.mrdwab.com/data-booksales")
book.sales$Stock = book.sales$Quantity + 10
book.sales$SubjCat[(book.sales$Subject == 'Economics') | 
  (book.sales$Subject == 'Management')] <- '1_EconSciences'
book.sales$SubjCat[book.sales$Subject %in% 
  c('Anthropology', 'Politics', 'Sociology')] <- '2_SocSciences'
book.sales$SubjCat[book.sales$Subject %in% c('Communication', 'Fiction',
  'History', 'Research', 'Statistics')] <- '3_other'

# to get to my starting dataframe (close to the project I am working on) 
book.sales1 <- ddply(book.sales, c('Region', 'Representative', 'SubjCat', 
                                   'Subject', 'Publisher'), summarize,
                 Stock = sum(Stock), Sold = sum(Quantity),
                 Ratio = round((100 * sum(Quantity)/sum(Stock)), digits = 1))


#melt it 
m.book.sales = melt(data = book.sales1, id.vars = c('Region', 'Representative',
                                        'SubjCat', 'Subject', 'Publisher'),
                    measured.vars = c('Stock', 'Sold', 'Ratio'))

# cast it --- # Please ignore this cast this was a mistake 
# Tab1 <- dcast(data = m.book.sales, 
#         formula = Region + Representative ~ Publisher + variable,
#         fun.aggregate = sum, margins = c('Region', 'Representative'))

Tab1 <- dcast(data = m.book.sales, formula = Region + Representative ~ 
  SubjCat + Subject + variable, fun.aggregate = sum,
              margins = c('Region', 'Representative', 'SubjCat', 'Subject'))

今私の質問:

  1. 小計を行に追加できました。ただし、列に余白を追加することもできますか。たとえば、あるパブリッシャーの在庫の合計を考えてみてください。申し訳ありませんが、すべてのサイト運営者の合計販売数の例を言うつもりでした。

  2. 「比率」の列に問題があります。この変数の「合計」ではなく「平均」を取得するにはどうすればよいですか?

注意: 質問 1 (余白の小計について) は解決できます。

PS: を使用した例をいくつか見reshapeました。代わりに使用することをお勧めしますかreshape2(2 つの機能の機能が含まれていないようです)。

4

1 に答える 1

2

質問 1 で何を求めているのか正確にはわかりませんが、在庫の合計が必要な場合は、Publisherこれを実行しないでください。

 totalofstock <- ddply(book.sales, ('Publisher'), function(x)   
                      data.frame=c(subtotals  =  sum(x$Stock)))

追加したい場合は、次のようにしTab1ます。

Tab1$bloomsburytotalofstock<-totalofstock[1,][[2]]
head(Tab1)

質問 2 については、確実にameanではなくa を取得すると、関数を からに変更することになります。sumsummean

例えば

ratiomeans <- ddply(book.sales1, ('Publisher'), function(x)   
                      data.frame=c(ratioMEAN  =  mean(x$Ratio)))

また、私は固執することをお勧めしreshape2ます。 reshape2は基本的に の新しいバージョンですreshape。私の知る限りでreshapeは、作業は行われていませんが、古いコードを使用している人がreshapeすべてを書き直す必要がないように、まだ存在しています。

編集

justratio<-(m.book.sales[m.book.sales$variable=="Ratio",])
Tab2 <- dcast(data = justratio, 
        formula = Region + Representative ~ SubjCat + Subject + variable,
        fun.aggregate = mean,
        margins = c('Region', 'Representative', 'SubjCat', 'Subject'))
final<-merge(Tab1,Tab2,by=c("Region","Representative"))
于 2012-09-16T09:17:26.513 に答える