【发布时间】:2018-04-01 03:47:01
【问题描述】:
我有一个名为 DF 的日期框架,其中包含三个相互循环重复的变量:
A B C A B C
1 a1 b1 c1 a5 b5 c5
2 a2 b2 c2 a6 b6 c6
3 a3 b3 c3 a7 b7 c7
4 a4 b4 c4 a8 b8 c8
我想将第一个 A 列堆叠在第二个 A 列上(以及第三个和第四个等,如果它们存在),并对其他变量执行相同操作,然后将结果另存为新对象(例如,作为向量)。 所以我想要得到的是
V_A <- c(a1,a2,a3,a4,a5,a6,a7,a8)
V_B <- c(b1,b2,b3,b4,b5,b6,b7,b8)
V_C <- c(c1,c2,c3,c4,c5,c6,c7,c8)
虽然手动操作很容易,像这样
V_A <- DF[,seq(1, ncol(DF), 3]
V_A <- stack(DF)
V_B <- DF[,seq(2, ncol(DF), 3]
V_B <- stack(DF)
V_C <- DF[,seq(3, ncol(DF), 3]
V_C <- stack(DF)
我正在寻找的是一个自动执行此操作的代码,以便它适用于具有各种变量的数据帧,而无需每次都编写临时代码。 总而言之,代码应该: 1)选择数据框中的每第n列 2)堆叠此列 3) 将结果保存在自动创建的新对象中
我觉得一定有办法做到这一点,但到目前为止我还没有成功。提前非常感谢。
编辑 假设我处于稍微不同的情况,列重复但名称不完全相同,我仍然想做同样的事情。所以我有:
A1 B1 C1 A2 B2 C2
1 a11 b11 c11 a25 b25 c25
2 a12 b12 c12 a26 b26 c26
3 a13 b13 c13 a27 b27 c27
4 a14 b14 c14 a28 b28 c28
我想要:
V_A <- c(a11,a12,a13,a14,a25,a26,a27,a28)
V_B <- c(b11,b12,b13,b14,b25,b26,b27,b28)
V_C <- c(c11,c12,c13,c14,c25,c26,c27,c28)
我该怎么做?
【问题讨论】: