如何将每n列中的每一列都绑定为另一行(从宽到长)?

问题描述 投票:0回答:1

这里是我没有列名称的数据集:

ADNAC TI     0.09   ADNAC TI     0.09   ADNAC TI     0.09   ADNAC TI     0.08 
AEFES TI     3.76   AEFES TI     3.48   AEFES TI     3.74   AEFES TI     3.24 
AGHOL TI     0.43   AGHOL TI     0.37   AGHOL TI     0.31   AGHOL TI     0.39 
AGYO TI      0.09   AGYO TI      0.08   AGYO TI      0.08   AGYO TI      0.08 
AKBNK TI     9.21   AKBNK TI     8.30   AKBNK TI     8.26   AKBNK TI     10.57 
AKCNS TI     0.45   AKCNS TI     0.43   AKCNS TI     0.43   AKCNS TI     0.47 
AKENR TI     0.53   AKENR TI     0.46   AKENR TI     0.45   AKENR TI     0.43 

每两列并排代表一天(在这种情况下,字符串及其相应的值)。总共有100行和382列,因此为191天。我想做的就是每天一排又一排地排成一行,而与他们的日子无关。所以我总共有100x191行,只有2列,而是字符串(股票名称)和相应的值。看起来像:

ADNAC TI     0.09 
AEFES TI     3.76 
AGHOL TI     0.43 
AGYO TI      0.09 
AKBNK TI     9.21 
AKCNS TI     0.45 
AKENR TI     0.53 
ADNAC TI     0.09 
AEFES TI     3.48 
AGHOL TI     0.37 
AGYO TI      0.08 
AKBNK TI     8.30 
AKCNS TI     0.43 
AKENR TI     0.46 
ADNAC TI     0.09 
AEFES TI     3.74 
AGHOL TI     0.31 
AGYO TI      0.08 
AKBNK TI     8.26 
AKCNS TI     0.43 
AKENR TI     0.45 
ADNAC TI     0.08 
AEFES TI     3.24 
AGHOL TI     0.39 
AGYO TI      0.08 
AKBNK TI     10.57 
AKCNS TI     0.47 
AKENR TI     0.43 

到目前为止,我一直尝试分割数据:data_long <- split.default(data_wide, rep(1, each = 2))

以及reshapemelt的其他几次不成功的尝试,这主要是由于索引问题而导致的失败。我尝试通过为每天的股票名称和值分配AB来实现此目的,每天的股票名称和价值将依次为BB1,依此类推。但是在Excel中混合使用字符串和数字进行传播并没有达到我的预期,因此我不得不手动执行,这毫无意义。

r split dplyr reshape melt
1个回答
0
投票

一种简单的方法是使用向量循环来选择备用列:

data.frame(stock = unlist(df[c(TRUE, FALSE)]), 
           value = unlist(df[c(FALSE, TRUE)]), row.names = NULL, stringsAsFactors = FALSE)
© www.soinside.com 2019 - 2024. All rights reserved.