2012-02-28 11 views
1

以前はSASユーザーでした。私はSASをもう使用していないため、Rを仕事に使うことを学ぶ必要があります。 データセットは次の列があります。複数の変数と1つ以上のメトリックを使用した転記R

market date sitename impression clicks 

私はにそれを移調したい:私は私が行うために使用されるSASで考える

market date sitename-impression sitename-clicks 

Proc Transpose 
by market date; 
id sitename; 
var impression clicks; 
run; 

私は本を持っていますRで、たくさんのグーグルで検索しましたが、解決策を見つけることができませんでした...

私は本当に感謝しますか?誰でも助けることができます。

ありがとうございます!!!

+0

'reshape'や' reshape'パッケージから 'cast'や' melt'のようなものを探しています。私はSASに精通していないので、あなたが与えた機能の出力は何か分かりません。あなたは入力データと希望する出力の小さなサンプルを提供できますか? – Justin

+0

ああ、ポスターがワイドからロングに行きたいと思うかもしれない。それは私の答えを無視する場合です。 –

+0

@Justin変数名を見るとあなたの提案が最も理にかなっていますが、ポスターが自分が何を持っているか、何を期待しているか(または自分が持っているデータを表現しているか)のデータセットを提供するまでは私は答えを編集していません –

答えて

4

私はまずはstackoverflowへようこそ。新しいユーザーがついてうれしいです。質問をするときは、使用しているコードと元のように見える再現可能なデータセットを提供することが有益で奨励されています。これは最小再現可能な例と呼ばれます。ここにデータセットを取得するには、いくつかのオプションを使用できます。ここには2つあります:オブジェクト名の前後にdput()を使用し、コンソールに表示されているものをカットアンドペーストするか、データフレームを直接ポストするだけです。コードには、問題を再現するために必要なすべてのコードを提供します。今後のご質問にお役立てください。

私は完全に理解していないかもしれませんが、私はあなたがデータを変換するのではなく、変換したいと思っています。ブライアンのコメントと変数を見て

dat <- data.frame(market=rnorm(10), date=rnorm(10), #let's create a data set 
    sitename=rnorm(10), impression=rnorm(10), clicks=rnorm(10)) 
dat #look at it (I pasted it below) 

# > dat              
#   market  date sitename impression  clicks 
# 1 -0.9593797 -0.08411994 1.6079129 -0.5204772 -0.31633966 
# 2 -0.5088689 1.78799500 -0.2469315 1.3476964 -0.04344779 
# 3 -0.1527465 0.81673996 1.7824969 -1.5531260 -1.28304384 
# 4 -0.7026194 0.52072913 -0.1174356 0.5722210 -1.20474443 
# 5 -0.4537490 -0.69139062 1.1124277 -0.2452974 -0.33025320 
# 6 0.7466588 0.36318337 -0.4623319 -0.9036768 -0.65754302 
# 7 0.8007612 2.59588554 0.1820732 0.4318629 -0.36308748 
# 8 1.0781715 -1.01512734 0.2297475 0.9219439 -1.15687902 
# 9 0.3731450 -0.19004572 0.5190749 -1.4020371 -0.97370295 
# 10 0.7724259 1.76528303 0.5781786 -0.5490849 -0.83819036 

#now to create the new columns (I think this is what you want) 
#the easiest way is to use transform. ?tranform for more   
dat.new <- transform(dat, sitename.clicks=sitename-clicks, 
    impression.clicks=impression-clicks) 
dat.new #here's the new data set. Notice it has the new and old columns. 

#To get rid of the old columns you can use indexing and specify the columns you want. 
dat.new[, c(1:2, 6:7)] 

#We could have also done: 
dat.new[, c(1,2,6,7)] 
#or said the columns not wanted with negative indexing: 
dat.new[, -c(3:5)] 

EDITは、私は長い広い変換には、どのようなポスターの欲望であると思うだろう。私はWickhamのreshape2パッケージを使ってアプローチする方がよいでしょう。この方法は私にとっては使いやすく、Rの初心者にとっても簡単だと思います。しかし、ブライアンは提供し、ここで同じデータを使用して幅広いフォーマットに長いを行うための基本方法は次のとおりです。

wide <- reshape(DF, v.names=c("impression", "clicks"), idvar=c("market", "date"), 
timevar="sitename", direction="wide") 

reshape(wide) 

リシェイプ機能は非常に柔軟ですが、一部が適切に使用するために慣れが必要。私は今これがポスターの意図ではないと信じていますが、私はこの投稿の歴史を維持するために私の以前の応答を残しています。これは、再現可能な例がクエリを明確にするのに非常に役立つことを思い出させるものです。

1

タイラー氏によると、データの例は重要です。私はあなたのデータが異なっていると思ったので、私はあなたの質問を違って解釈しました。私は数値のリテラルの減算として-を取ったのではなく、変数の組み合わせです。

DF <- expand.grid(market = LETTERS[1:5], 
        date = Sys.Date()+(0:5), 
        sitename = letters[1:2]) 
n <- nrow(DF) 
DF$impression <- sample(100, n, replace=TRUE) 
DF$clicks <- sample(100, n, replace=TRUE) 

私は転位/変換/再配列のこれらの並べ替えのために有用reshape2パッケージを見つけます。

library("reshape2") 

dcast(melt(DF, id.vars=c("market","date","sitename")), 
     market+date~sitename+variable) 

market  date a_impression a_clicks b_impression b_clicks 
1  A 2012-02-28   74  97   11  71 
2  A 2012-02-29   34  30   88  35 
3  A 2012-03-01   40  85   40  49 
4  A 2012-03-02   46  12   99  20 
5  A 2012-03-03   6  95   85  56 
6  A 2012-03-04   61  61   42  64 
7  B 2012-02-28   4  53   74  9 
8  B 2012-02-29   43  27   92  59 
9  B 2012-03-01   34  26   86  43 
10  B 2012-03-02   81  47   84  35 
11  B 2012-03-03   3  5   91  48 
12  B 2012-03-04   19  26   99  21 
13  C 2012-02-28   22  31   100  53 
14  C 2012-02-29   40  83   95  27 
15  C 2012-03-01   78  89   81  29 
16  C 2012-03-02   57  55   79  87 
17  C 2012-03-03   37  61   3  97 
18  C 2012-03-04   83  61   41  77 
19  D 2012-02-28   81  18   47  3 
20  D 2012-02-29   90  100   17  83 
21  D 2012-03-01   12  40   35  93 
22  D 2012-03-02   85  14   63  67 
23  D 2012-03-03   63  53   29  58 
24  D 2012-03-04   40  79   56  70 
25  E 2012-02-28   97  62   68  31 
26  E 2012-02-29   24  84   17  63 
27  E 2012-03-01   94  93   32  2 
28  E 2012-03-02   6  26   86  26 
29  E 2012-03-03   100  34   37  80 
30  E 2012-03-04   89  87   72  11 

を与える列名は、それらの間_ではなく-を持っていますが、あなたがしたい場合は、その変更することができます。だが、-が減算(名前を引用する必要がある)とみなされるので、後で列を参照する際に問題が生じるため、私はそれをお勧めしません。

関連する問題