我下面的数据集是宽格式的,我想将其转换为长格式。我希望列为“年”和“季度”而不是下面的列。我的第一个想法是使用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
假设您的变量名称都格式化为“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