下面是一个没有列名的数据集:
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))
还有其他几次reshape或melt的失败尝试,这主要是由于索引问题导致的失败。我试图通过为每天的股票名称和价值分配A、和B来实现这一点,这将继续作为B、和B1等等。但是,混合字符串和数字在Excel中传播并没有达到我的预期,所以我不得不手动执行,这是没有意义的。
发布于 2020-04-19 14:52:47
一种简单的方法是使用向量回收来选择替代列,unlist将它们作为向量获取数据并创建新的数据格式。
data.frame(stock = unlist(df[c(TRUE, FALSE)]),value = unlist(df[c(FALSE, TRUE)]),
row.names = NULL, stringsAsFactors = FALSE)
# stock value
#1 ADNACTI 0.09
#2 AEFESTI 3.76
#3 AGHOLTI 0.43
#4 AGYOTI 0.09
#5 AKBNKTI 9.21
#6 AKCNSTI 0.45
#7 AKENRTI 0.53
#8 ADNACTI 0.09
#9 AEFESTI 3.48
#10 AGHOLTI 0.37
#11 AGYOTI 0.08
#12 AKBNKTI 8.30
#13 AKCNSTI 0.43
#14 AKENRTI 0.46使用split.default,我们可以做到:
df[c(TRUE, FALSE)] <- lapply(df[c(TRUE, FALSE)], as.character)
do.call(cbind.data.frame, lapply(split.default(df, c(TRUE, FALSE)), unlist))数据
df <- structure(list(V1 = structure(1:7, .Label = c("ADNACTI", "AEFESTI",
"AGHOLTI", "AGYOTI", "AKBNKTI", "AKCNSTI", "AKENRTI"), class = "factor"),
V2 = c(0.09, 3.76, 0.43, 0.09, 9.21, 0.45, 0.53), V3 = structure(1:7,
.Label = c("ADNACTI","AEFESTI", "AGHOLTI", "AGYOTI", "AKBNKTI", "AKCNSTI",
"AKENRTI"), class = "factor"), V4 = c(0.09, 3.48, 0.37, 0.08, 8.3,
0.43, 0.46)), class = "data.frame", row.names = c(NA, -7L))https://stackoverflow.com/questions/61306264
复制相似问题