2017-12-07 27 views
0

아래의 데이터 세트는 와이드 포맷이며 긴 포맷으로 변환하고 싶습니다. "Year"와 "Quarter"가되는 컬럼이 아래에있는 방법 대신에 사용되었습니다. 첫 번째 생각은 spread()를 사용하고 gather()를 사용하는 것이지만 내 데이터가 설정되는 방식으로이를 수행하는 방법을 잘 모릅니다 . 일반적으로이 데이터를 피벗 테이블을 사용하여 Excel에서 분석되고 사용되는 행의 수를 제한하려면이 방법을 설정까지.시간 변수가 "FY2017Q1", FY2017Q2 "등일 때 데이터 세트를 정리하는 방법은 무엇입니까?

# A tibble: 957,545 x 3 
    FY2017Q1 FY2017Q2 FY2017Q3 
     <int> <int> <int> 
1  149  NA  NA 
2  22  NA  NA 
3  NA  NA  268 
4  NA  NA  NA 
5  1  NA  NA 
6  49  NA  NA 
7  NA  NA  NA 
8  NA  NA  NA 
9  NA  225  300 
10  NA  196  167 
# ... with 957,535 more rows 
+0

당신이 실제로 R에로드에 대한 자세한 정보를 제공 할 수 있습니까? – Batato

답변

0

당신의 변수 이름을 가정 모두 잘 "FY #### Q 번호로 지정됩니다 "다음 작업을 수행해야합니다.

library(dplyr) 
library(tidyr) 

df %>% 
    gather(key, value) %>% 
    mutate(Year = substring(key, 3, 6), 
     Quarter = substring(key, 7, 8)) %>% 
    select(Year, Quarter, value) %>% 
    na.omit() # skip this step if you want to keep the NAs 

    Year Quarter value 
1 2017  Q1 149 
2 2017  Q1 22 
5 2017  Q1  1 
6 2017  Q1 49 
19 2017  Q2 225 
20 2017  Q2 196 
23 2017  Q3 268 
29 2017  Q3 300 
30 2017  Q3 167 

샘플 데이터 :

df <- read.table(text = " FY2017Q1 FY2017Q2 FY2017Q3 
         1  149  NA  NA 
         2  22  NA  NA 
         3  NA  NA  268 
         4  NA  NA  NA 
         5  1  NA  NA 
         6  49  NA  NA 
         7  NA  NA  NA 
         8  NA  NA  NA 
         9  NA  225  300 
         10  NA  196  167") 
> df 
    FY2017Q1 FY2017Q2 FY2017Q3 
1  149  NA  NA 
2  22  NA  NA 
3  NA  NA  268 
4  NA  NA  NA 
5   1  NA  NA 
6  49  NA  NA 
7  NA  NA  NA 
8  NA  NA  NA 
9  NA  225  300 
10  NA  196  167