希望在R中的多个列上转置数据帧

希望在R中的多个列上转置数据帧,r,dataframe,R,Dataframe,这是一个示例数据帧 mydataf.tickersymbol mydataf.yr_qtr mydataf.act_mean 1 ABC 20084 BB 2 ABC 20091 BB 3 ABC 20092 BB 4 AB

这是一个示例数据帧

 mydataf.tickersymbol mydataf.yr_qtr mydataf.act_mean
1                  ABC          20084               BB
2                  ABC          20091               BB
3                  ABC          20092               BB
4                  ABC          20093               BB
5                  DEF          20084               BB
6                  DEF          20091               BB
7                  DEF          20092               BB
8                  DEF          20093               BB
9                  DEF          20094               BB
10                 GEF          20092               BB
11                 GEF          20093               BB
12                 GEF          20094                M
通过连接每个股票代码的
yr\u qtr
,并关注缺失的数据值,尝试获得的输出。我可以遍历和循环这个,并为所有检查创建逻辑,但似乎通过数据帧,我应该能够使用r数据帧功能来完成这项工作

       20084    20091   20092   20093   20094
ABC     AA      BB      BB      BB      
DEF     BB      BB      BB      BB      BM
GEF                     BB      BB      M

看起来您正在尝试从长格式改为宽格式,使用
'mydataf.tickersymbol'
作为键(也称为idvar),将
'mydataf.yr\u qtr'
作为时间变量(可以被认为是区分宽格式列的鉴别器列)。但是,您问题中的数据有点不一致,例如20094/DEF应该是BB而不是BM,20084/ABC应该是BB而不是AA,不是吗?无论如何,我想这就是你想要的:

df <- data.frame(mydataf.tickersymbol=c('ABC','ABC','ABC','ABC','DEF','DEF','DEF','DEF','DEF','GEF','GEF','GEF'), mydataf.yr_qtr=c(20084,20091,20092,20093,20084,20091,20092,20093,20094,20092,20093,20094), mydataf.act_mean=c('BB','BB','BB','BB','BB','BB','BB','BB','BB','BB','BB','M') );
wide <- reshape(df,dir='w',idvar='mydataf.tickersymbol',timevar='mydataf.yr_qtr');
names(wide) <- sub('^mydataf\\.act_mean\\.','',names(wide));
wide;
##    mydataf.tickersymbol 20084 20091 20092 20093 20094
## 1                   ABC    BB    BB    BB    BB  <NA>
## 5                   DEF    BB    BB    BB    BB    BB
## 10                  GEF  <NA>  <NA>    BB    BB     M
df我只想做:

library(tidyr)
df %>% spread(mydataf.yr_qtr, mydataf.act_mean)
或者使用
重塑2
软件包:

library(reshape2)
dcast(df, mydataf.tickersymbol ~ mydataf.yr_qtr,
                        value.var = "mydataf.act_mean")
其中:

  mydataf.tickersymbol 20084 20091 20092 20093 20094
1                  ABC    BB    BB    BB    BB  <NA>
2                  DEF    BB    BB    BB    BB    BB
3                  GEF  <NA>  <NA>    BB    BB     M

我建议在标题中使用“join”会产生误导,应该使用不同的词来表达在一个数据集中重新排列元素的意图。不,我的意思是
acast
,因为在OP的预期输出中,它似乎有行名,而不是列。但是,这只是一个选择。我正在使用
重塑2_1.4
,也许有版本差异?@jazz_learn很高兴它有所帮助。如果它回答了你的问题,请考虑左边的勾选,以此作为答案。
library(reshape)#reshape2_1.4  
as.data.frame(acast(df, mydataf.tickersymbol~mydataf.yr_qtr, 
              value.var='mydataf.act_mean', fill=''))
#     20084 20091 20092 20093 20094
# ABC    BB    BB    BB    BB      
# DEF    BB    BB    BB    BB    BB
# GEF                BB    BB     M