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

jaz*_*arn 2 r dataframe

这是我的示例数据帧

 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
Run Code Online (Sandbox Code Playgroud)

尝试通过加入yr_qtr每个股票代码并关注缺失的数据来获得输出.我可以通过循环并为所有检查创建逻辑,但似乎通过数据框我应该能够使用r数据帧功能吗?

       20084    20091   20092   20093   20094
ABC     AA      BB      BB      BB      
DEF     BB      BB      BB      BB      BM
GEF                     BB      BB      M
Run Code Online (Sandbox Code Playgroud)

Ste*_*pré 5

我会这样做:

library(tidyr)
df %>% spread(mydataf.yr_qtr, mydataf.act_mean)
Run Code Online (Sandbox Code Playgroud)

或使用reshape2包:

library(reshape2)
dcast(df, mydataf.tickersymbol ~ mydataf.yr_qtr,
                        value.var = "mydataf.act_mean")
Run Code Online (Sandbox Code Playgroud)

这使:

  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
Run Code Online (Sandbox Code Playgroud)

或者如果我们需要"mydataf.tickersymbol"作为行名,使用acast它将提供矩阵输出,然后转换回data.frame与as.data.frame

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
Run Code Online (Sandbox Code Playgroud)