如何在R代码的两级标题上旋转数据帧 [英] How to pivot a dataframe on a two level header in R code

查看:17
本文介绍了如何在R代码的两级标题上旋转数据帧的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我仍然是R的新手,这几天来我一直在为这个问题而苦苦挣扎。我找到了一些解决方案,但我正在寻找简短的代码,我宁愿避免循环,但到目前为止,我只能想到这些。 我的数据如下:

我希望它的外观如下:

Country    Year       ATM      POS  
France     2015        1       10    
France     2014        5        2    
France     2013       12        4     
France     2012        2       12   

我没有找到解决此问题的捷径,所以我将其分解为几个步骤:我禁用了标题,尝试从第1行创建向量,我想我应该先对年份做更长时间的透视,但我得到了一个错误:

ATM <- pivot_longer(data = dat, cols = dat[,2:6],names_to = "Year",values_to = headervector) 

这还需要POS部件的循环。 那么,除了解决这个问题之外,还有没有更好的不需要循环的方法呢?

非常感谢!

推荐答案

您可以将此解决方案用于任意数量的设备和年份,而以前仅处理ATMPOS。这是使用您的第一个数据屏幕(只需加载您的Excel文件)完成的:

library(xlsx)
library(zoo)
library(reshape2)
library(dplyr)
library(tidyr)

#Data
dat <- structure(list(NA. = structure(1:2, .Label = c("Country", "France"
), class = "factor"), ATM = c(2015, 12), NA..1 = c(2014, 3), 
    NA..2 = c(2013, 4), NA..3 = c(2012, 6), NA..4 = c(2011, 7
    ), NA..5 = c(2010, 8), POS = c(2015, 9), NA..6 = c(2014, 
    9), NA..7 = c(2013, 12), NA..8 = c(2012, 11), NA..9 = c(2011, 
    56), NA..10 = c(2010, 78)), class = "data.frame", row.names = c(NA, 
-2L))

#Process names
names(dat)[1]<-'Country'
vecnames <- names(dat)[-1]
vecnames[which(grepl('NA',vecnames))]<-NA
vecnames <- na.locf(vecnames)
#Include year
vecnames2 <- dat[1,-1]
#Join
vecnames3 <- paste0(vecnames,'_',vecnames2)
#Assign names
names(dat)[-1]<-vecnames3
#Remove first row
dat <- dat[-1,]
#Melt data
melt.data <- melt(dat,id.vars = 'Country')
melt.data$variable<-as.character(melt.data$variable)
#Create columns
melt.data %>%
  separate(variable, c("Device", "Year"), "_") -> melt.data
#Output
DataG <- reshape(melt.data, idvar=c('Country','Year'), timevar='Device', direction="wide")

输出:

  Country Year value.ATM value.POS
1  France 2015        12         9
2  France 2014         3         9
3  France 2013         4        12
4  France 2012         6        11
5  France 2011         7        56
6  France 2010         8        78

这篇关于如何在R代码的两级标题上旋转数据帧的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆