希望在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