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
我有一个这样的数据集(是的,有双标题,因为这些是我的 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