2016-09-07 1 views
1

단일 변수의 번호가 매겨진 버전을 생성하여 긴 데이터 프레임을 와이드 포맷으로 변환 한 후 reshape을 실행 취소하고 싶습니다. 여러 가지 주요 변수와 여러 변수가 다시 결합해야 할 때 제가 직면하는 과제는이를 수행하는 것입니다. 나는 gathertidyr에서 사용하지 않으려 고 시도했다. 다음 data.frame 제공생성 된 임의의 수의 열로 도형 다시 실행

toy = data.frame(
    first_key = rep(c("A", "B", "C"), each = 6), 
    second_key = rep(rep(c(1:2), each = 3), 3), 
    colors = c("red", "yellow", "green", "blue", "purple", "beige"), 
    days = c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"), 
    index = c(1:3) 
) 

:

toy_wide = reshape(toy, idvar = c("first_key", "second_key"), 
      timevar = "index", direction = "wide", sep = "_") 
: 변수의 번호가 매겨진 버전의 다양한 형식으로 재편

first_key second_key colors  days index 
     A   1 red Monday  1 
     A   1 yellow Tuesday  2 
     A   1 green Wednesday  3 
     A   2 blue Thursday  1 
     A   2 purple Friday  2 
     A   2 beige Saturday  3 
     B   1 red Monday  1 
     B   1 yellow Tuesday  2 
     B   1 green Wednesday  3 
     B   2 blue Thursday  1 
     B   2 purple Friday  2 
     B   2 beige Saturday  3 
     C   1 red Monday  1 
     C   1 yellow Tuesday  2 
     C   1 green Wednesday  3 
     C   2 blue Thursday  1 
     C   2 purple Friday  2 
     C   2 beige Saturday  3 

은 다음과 같습니다 긴 데이터의 예를 가지고

그리고 넓은 형식을 제공합니다 :

first_key second_key colors_1 days_1 colors_2 days_2 colors_3 days_3 
     A   1  red Monday yellow Tuesday green Wednesday 
     A   2  blue Thursday purple Friday beige Saturday 
     B   1  red Monday yellow Tuesday green Wednesday 
     B   2  blue Thursday purple Friday beige Saturday 
     C   1  red Monday yellow Tuesday green Wednesday 
     C   2  blue Thursday purple Friday beige Saturday 

하지만 원래 형식으로 되돌리려면 어떻게해야합니까? 나는 다음을 시도했지만 오류가 발생합니다. 당신이 넓은 갈 reshape를 사용하는 경우

tidyr::gather(toy_wide, key = c("first_key", "second_key"), value = c("days", "colors"), 
     colors_1:days_3, factor_key = TRUE) 

Error: Invalid column specification

답변

1

measurepatterns 여러 걸릴 수 data.table에서 melt 또 다른 옵션입니다.

library(data.table) 
melt(setDT(toy_wide), measure = patterns("^colors", "^days"), 
    value.name = c("colors", "days"), variable.name = "index")[order(first_key, second_key)] 
+1

위대한 일반화 가능성! – Nancy

4

, 긴 다시 갈 reshape를 사용

reshape(toy_wide, idvar = c("first_key", "second_key"), timevar="index", 
     varying=3:8, direction="long", sep="_") 

#  first_key second_key index colors  days 
#A.1.1   A   1  1 red Monday 
#A.2.1   A   2  1 blue Thursday 
# ... 

당신이 목록이 될 수 varying= 변수 세트를 (지정하면 열이 3:8 값의 , 열의 값을 -(1:2), 또는 열 이름을 문자 벡터 c("a","b")로 놓고 sep=이면 reshape은 출력 변수 이름을 추측 할 수 있습니다. tely.

이 명확를 유지하고 더 나은 일을 자동화하기 위해 여러 단계로 고쳐 이러한 종류의 작업을 수행하는 것이 도움이 :

여기
ids <- c("first_key", "second_key") 
reshape(toy_wide, idvar=ids, timevar="index", 
     varying=setdiff(names(toy_wide), ids), direction="long", sep="_") 
관련 문제