下面我的数据集是宽格式的,我想将其转换为长格式。我希望这些专栏能够成为"年"和#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
答案 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