R-取消Pivot双柱

R-取消Pivot双柱,r,unpivot,R,Unpivot,我有一个这样的数据集(是的,有两个标题,因为这些是我的BI工具所必需的): 我更喜欢以下格式: 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) 但它没有给我想要的。上面的功能给了我时间和作

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

我更喜欢以下格式:

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)
但它没有给我想要的。上面的功能给了我时间和作品在一列,混淆了

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


提前感谢

假设您可以将双行标题减少为一行,这样您就有了以下格式的数据帧

df
  Firm Nov-OnTime Nov-Pieces Dec-OnTime Dec-Pieces
1    A        37%         60        50%         10
2    B        60%         50        10%         55
然后你可以使用一个
聚集-分离-排列
序列来产生你想要的

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
library(tidyr)
df2%聚集(键=键,值=值,-Firm)%>%#聚集除Firm之外的所有列
分开(键,into=c(“月”,“类型”),删除=TRUE)%>%#分为月和类型
排列(键=类型,值=值)#按类型排列(保留月)
df2
固定月准时制
12月1日50%10
11月2日37%60
3 B 12月10%55
4b 11月60%50

假设您可以将双行标题减少为一行,这样您就有了以下形式的数据框

df
  Firm Nov-OnTime Nov-Pieces Dec-OnTime Dec-Pieces
1    A        37%         60        50%         10
2    B        60%         50        10%         55
然后你可以使用一个
聚集-分离-排列
序列来产生你想要的

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
library(tidyr)
df2%聚集(键=键,值=值,-Firm)%>%#聚集除Firm之外的所有列
分开(键,into=c(“月”,“类型”),删除=TRUE)%>%#分为月和类型
排列(键=类型,值=值)#按类型排列(保留月)
df2
固定月准时制
12月1日50%10
11月2日37%60
3 B 12月10%55
4b 11月60%50

查看一下
tidyr::gather()
谢谢@AndrewGustar,但我似乎无法将列分开,所以您是否已将其读入数据帧或其他对象类型?如果执行
名称(df)
,会发生什么情况?一切都是一个因素,因为第一行有第二个名字吗?@Elin问得好。原始文件是.xlsx,我使用readxl包和read_excel()加载了它。我不确定您希望我如何回应,但是,数据显示为一个包含352个OB的文件。共有21个变量。这回答了你的问题吗?当你说“秀”是什么意思?你能把names()函数的结果放在你的问题里吗?R列名通常不能有两行。。。这些换行符是不是真的很长?看看
tidyr::gather()
谢谢@AndrewGustar,但我似乎无法将列分开,所以您是否已将其读入数据帧或其他对象类型?如果执行
名称(df)
,会发生什么情况?一切都是一个因素,因为第一行有第二个名字吗?@Elin问得好。原始文件是.xlsx,我使用readxl包和read_excel()加载了它。我不确定您希望我如何回应,但是,数据显示为一个包含352个OB的文件。共有21个变量。这回答了你的问题吗?当你说“秀”是什么意思?你能把names()函数的结果放在你的问题里吗?R列名通常不能有两行。。。这些换行符是真的还是很长的名称?谢谢-这很有效,但是,我不想这样做,因为我有很多列-D@ChristianR.Houen不喜欢什么?如果是列名,您可以执行类似
names(df)的操作,谢谢-这很有效,但是,我更愿意不这样做,因为我有很多列:-D@ChristianR.Houen不喜欢什么?如果是列名,您可以执行类似
names(df)的操作