2015-01-25 1 views
5

패키지의 gather에 대한 인수를 파악하려고합니다. 정리할 때, 함수가`gather '함수를 사용하여 데이터 프레임을 넓게부터 길게 매핑하는 데는 어떤 기준이 필요합니까?

나는 문서에보고하고, 구문은 다음과 같습니다

stocks <- data.frame(
    time = as.Date('2009-01-01') + 0:9, 
    X = rnorm(10, 0, 1), 
    Y = rnorm(10, 0, 2), 
    Z = rnorm(10, 0, 4) 
) 

gather(stocks, stock, price, -time) 

내가 마지막 줄에 대해 궁금 해요 :

gather(data, key, value, ..., na.rm = FALSE, convert = FALSE)

이 도움말 파일에 example 있습니다 :
gather(stocks, stock, price, -time)

여기서, stocks은 우리가 수정하고 싶은 데이터입니다. 괜찮습니다.

따라서 stockprice은 키 값 쌍에 대한 인수입니다.하지만이 키 값 쌍을 만들기 위해 열을 선택하는 방법을 어떻게 결정합니까? 원래 dataframe은 다음과 같습니다

time  X   Y   Z 
2009-01-01 1.10177950 -1.1926213 -7.4149618 
2009-01-02 0.75578151 -4.3705737 -0.3117843 
2009-01-03 -0.23823356 -1.3497319 3.8742654 
2009-01-04 0.98744470 -4.2381224 0.7397038 
2009-01-05 0.74139013 -2.5303960 -5.5197743 

나는 우리가 X, Y 또는 Z의 조합을 사용해야 어떤 표시를 볼 수 없습니다. 이 함수를 사용할 때 필자는 오랫동안 서식이 지정된 데이터 프레임의 열을 원하는 이름으로 선택하고 마치 gather이 마법처럼 작동한다고 생각합니다. 생각해 보니, melt을 사용할 때와 같은 느낌이 듭니다.

gather 열의 유형을 확인 하시겠습니까? 그것은 넓은 것부터 길게 어떻게 매핑합니까? 아래

편집 멋진 대답, 좋은 토론 아래, 그리고 림 구문을 설명하지 않지만 확실히,이 paper을 읽어야 철학 및 tidyr 패키지의 사용에 대한 자세한 정보를 원하는 다른 사람을 위해.

+0

'-time'은 시간을 제외한 모든 열을 사용합니다. 또 다른 방법은 "수집"해야 할 열을 지정하려는 경우'gather (stocks, stock value, value : X : Z)'를 사용하는 것입니다. 또는 심지어'모으다 (주식, 주식, 가치, X, Y, Z) '. 근본적으로 이것은'id.vars' ('melt (stocks, measure.vars = c ("X", "Y", "Z")를 지정하는 대신'measure.vars' 인수로'melt'를 사용하는 것과 같습니다.)'). – A5C1D2H2I1M1N2O1R2T1

답변

11

"tidyr"에서 ... 인수에 gather에 대한 계수 변수를 지정합니다. 이것은 다소 개념적으로는 melt과 약간 다르다. 많은 예제 (심지어 여기에 많은 답변이있다)는 id.vars 인수 (ID로 지정되지 않은 것은 측정 값임)를 사용하는 것을 보여줄 것이다.

또한 ... 인수에는 표시 한 예와 같이 - 열 이름을 사용할 수 있습니다. 이것은 기본적으로 "이 것을 제외하고 모든 열을 모으는 것"이라고 말합니다. gather의 또 다른 약식 접근법에는 콜론을 사용하여 열 범위를 지정하는 것이 포함됩니다 (예 : gather(stocks, stock, price, X:Z)).

gathermelt을 비교할 수 있습니다. 기능 코드를 살펴보십시오. 다음은 처음 몇 줄입니다 :

> tidyr:::gather_.data.frame 
function (data, key_col, value_col, gather_cols, na.rm = FALSE, 
    convert = FALSE) 
{ 
    data2 <- reshape2::melt(data, measure.vars = gather_cols, 
     variable.name = key_col, value.name = value_col, na.rm = na.rm) 
+0

흠 ...재밌 네요. '수집'은 그냥 '녹는'래퍼 일 뿐이에요. –

+0

@DavidArenburg, 나는 그것에 대한 답을 알고있는 사람이 단 한 명이라고 생각합니다. 'spread'는 단지'dcast'만이 아니기 때문에 아마도 이것은 지금의 템플릿일까요? "reshape2"와 "tidyr"사이의 전반적인 철학이 공정한 양과 다르다는 점이 나에게 다소 어색한 것 같지만, 아마도 그것이 완전히 다른 패키지 인 이유 일 것입니다. – A5C1D2H2I1M1N2O1R2T1

+3

@DavidArenburg 요점은'gather()'입니다. 사람들이 이해하기가 훨씬 쉬워지고'spread()'와 대칭이다. (melt()와 cast()와는 다르다) – hadley

관련 문제