2012-02-28 1 views
1

이전에는 SAS 사용자였습니다. 이제는 SAS가 없기 때문에 R을 사용하여 작업을 배워야합니다.여러 변수를 사용하고 둘 이상의 메트릭이있는 R을 내림

market date sitename impression clicks 

내가로 조옮김 할 :

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

을 나는 책을 수행

내가 SAS 생각
market date sitename-impression sitename-clicks 

내가 할하는 데 사용 데이터 집합은 다음과 같은 열이 연구에 많이 봤지만, 그 솔루션을 찾을 수 없습니다 ...

정말 고맙겠 누구든지 도움을 줄 수 있습니다.

미리 감사드립니다.

+0

'reshape' 또는'reshape' 패키지에서'cast' 나'melt' 같은 것을 찾고 있습니다. SAS에 익숙하지 않아서 당신이 제공 한 기능의 출력이 무엇인지 확신 할 수 없습니다. 입력 데이터와 원하는 출력의 작은 샘플을 제공 할 수 있습니까? – Justin

+0

아, 포스터가 와이드에서 오랫동안 가고 싶어 할 수도 있습니다. 그럴 경우 내 대답을 무시하십시오. –

+0

@Justin 변수 이름을 보면 제안이 가장 이해가되지만 포스터가 보유하고있는 데이터 세트와 기대하는 것 (또는 보유한 데이터의 표현)을 제공 할 때까지 내 대답을 편집하지 않을 것입니다 –

답변

4

환영 인사를 시작하겠습니다. 새 사용자가있어서 기쁘다. 질문 할 때 사용중인 코드와 원본처럼 보이는 재현 가능한 데이터 세트를 제공하는 것이 유용하고 권장됩니다. 이것은 최소한의 재현 가능한 예제라고합니다. 여기에 데이터 세트를 얻으려면 몇 가지 옵션을 사용할 수 있습니다. 여기에는 두 가지가 있습니다 : 객체 이름을 중심으로 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)] 

편집 나는 긴 넓은 변화에 어떤 포스터 욕망이라고 생각합니다. Wickham의 reshape2 패키지를 사용하여 접근 할 가능성이 높습니다.이 방법은 저와 작업하기가 쉽기 때문에 R 초보자도 쉽게 사용할 수 있다고 상상해보십시오.

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

reshape(wide) 

모양 변경 기능은 매우 유연하지만, 일부는 적절하게 사용하는 데 익숙해 취 그러나, 여기에 동일한 데이터가 브라이언 제공 설정하여 다양한 형식으로 오래 할 수있는 기본 방법입니다. 나는 이것이 포스터의 의도가 아니라고 지금 믿지만이 포스트의 역사를 지키기 위해 나의 이전 응답을 남겨 둘 것입니다. 재현 할 수있는 예제는 쿼리를 명확하게 설명하는 데 매우 유용하다는 것을 상기시키는 역할을합니다.

1

타일러 (Tyler)가 말했듯이 예제 데이터가 중요합니다. 귀하의 데이터가 다르기 때문에 귀하의 질문을 다르게 해석했습니다. 나는 -을 숫자의 리터럴 빼기가 아니라 변수의 조합으로 사용했습니다.

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 

열 이름이 오히려 -보다 그들 사이 _을 제공하지만, 당신은 당신이 원하는 경우에 있음을 변경할 수 있습니다.나중에 -이 뺄셈으로 취해지기 때문에 (나중에 이름을 인용해야 할 것입니다.) 열을 참조하는 데 문제가 생기기 때문에 추천하지 않습니다.

관련 문제