R- Unpivot 双列

R- Unpivot double columns

我有一个这样的数据集(是的,有双标题,因为这些是我的 BI 工具所必需的):

library(readxl)
df = read_excel("df.xlsx")
View(df)
Firm November November December December etc etc
Firm On-time  Pieces   On-time  Pieces   etc etc
A    37%      60       50%      10
B    60%      50       10%      55

我更喜欢以下格式:

Firm Month    On-time Pieces
A    December 50%     10
A    November 37%     60
Etc
etc

我试过了:

df %>%
gather(month, ot, -firm) %>%
filter(firm != "firm") %>%
arrange(firm)

但它并没有给我我想要的。上面的函数给了我 on-time 和一栏中的碎片,混在一起。

我在任何地方都找不到这个,但是如果你找到了,请发表评论,我当然会删除 post。

提前致谢

假设您可以将双行标题减少为单行,以便您拥有以下形式的数据框...

df
  Firm Nov-OnTime Nov-Pieces Dec-OnTime Dec-Pieces
1    A        37%         60        50%         10
2    B        60%         50        10%         55

然后你可以使用gather - separate - spread序列来产生你想要的...

library (tidyr)
df2 <- df %>% gather(key=key, value=value, -Firm) %>%       #gather all columns except Firm
    separate(key, into=c("Month", "Type"), remove=TRUE) %>% #split into month and type
    spread(key=Type, value=value)                           #spread by Type (keeping month)

df2
  Firm Month OnTime Pieces
1    A   Dec    50%     10
2    A   Nov    37%     60
3    B   Dec    10%     55
4    B   Nov    60%     50