【发布时间】:2019-07-19 15:22:32
【问题描述】:
我有一个数据框。在我的数据集中。 a、a1 和 a2 是完全相同的变量。但是,当您在 r 中具有相同的名称时,它会自动在名称末尾添加 1。
df = data.frame(a = rnorm(4), b = rnorm(4), c = rnorm(4), a1 = rnorm(4), b1 = rnorm(4), c1 = rnorm(4), a2 = rnorm(4),
b2 = rnorm(4), c2 = rnorm(4), date = seq(as.Date("2019-05-05"),as.Date("2019-05-08"), 1))
print(df)
a b c a1 b1 a2 b2 c2 date
1 -1.0938097 1.3948486 1.2805904 1.6187439 1.0200681 -1.4335761 -0.4583526 0.3825598 2019-05-05
2 -0.3195004 -1.1281779 -2.1905902 -1.1693616 -0.9612850 -0.7502631 -0.5637997 0.3072459 2019-05-06
3 -0.2135026 0.7015042 -0.8271073 -0.1115213 -1.0378507 0.5620332 -2.0615450 1.7363142 2019-05-07
4 1.0413566 -1.1983207 0.9262545 0.6454741 -0.7874252 0.1904461 0.8970132 -1.4173619 2019-05-08
我想将这些数据转换为长格式,我将数据帧分成块(a-c、a1-c1、a2-c2),然后对每个子集进行 rbind。在 data.frame 的末尾有一个名为 date 的键列。
我希望表格变成下面这样。
a b c date
1 1.70236896 0.1847794 1.0642016 2019-05-05
2 -1.84604746 1.1229081 1.0550992 2019-05-06
3 -0.70185143 -0.8527223 1.3261573 2019-05-07
4 -0.47930296 0.2822001 -0.3271825 2019-05-08
5 -0.09950265 -0.1881748 -0.7482557 2019-05-05
6 0.72087483 2.0053211 1.1154889 2019-05-06
7 -1.83254875 -0.4060090 -0.2664467 2019-05-07
8 -0.17379130 0.6302901 1.5287194 2019-05-08
9 1.72706128 -1.4701842 1.1615761 2019-05-05
10 2.00246599 0.1306764 -1.8767190 2019-05-06
11 0.05263048 0.1173080 0.4293342 2019-05-07
12 -0.70024619 1.0677009 -0.2974141 2019-05-08
谢谢。
【问题讨论】:
-
你需要
melt(setDT(df), measure = patterns("^a", "^b", "^c"), value.name = c("a", "b", "c")) -
我认为您缺少
c1 -
我添加了 C1。谢谢
-
akrun 你能发布你的答案,这样我就可以给你信任。这效果很好
标签: r dplyr data.table tidyverse