当我的时间变量为" FY2017Q1",FY2017Q2"等时,如何整理我的数据集?

时间:2017-12-07 19:26:08

标签: r tidyr

下面我的数据集是宽格式的,我想将其转换为长格式。我希望这些专栏能够成为"年"和#34;季"而不是它如何在下面。我的第一个想法是使用spread()然后收集()但是我不确定如何使用我的数据设置方式来做这件事。通常,使用数据透视表在Excel中分析此数据,并以此方式设置以限制使用的行数。

# 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

1 个答案:

答案 0 :(得分:0)

假设您的变量名称都格式化为&#34; FY #### Q#&#34;,以下内容应该可以胜任:

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