This question already has answers here:
Reshaping multiple sets of measurement columns (wide format) into single columns (long format)
(7个答案)
4个月前关闭。
我有一个数据框。在我的数据集中。 a,a1和a2是完全相同的变量。但是,当您在r中具有相同的名称时,它将在名称末尾自动添加1。
我想将此数据转换为长格式,在该格式中,我将数据帧分为多个块(a-c,a1-c1,a2-c2),然后重新绑定每个子集。 data.frame的末尾有一个称为date的关键列。
我希望该表成为以下内容。
谢谢。
(7个答案)
4个月前关闭。
我有一个数据框。在我的数据集中。 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),然后重新绑定每个子集。 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
中的data.table
,它可以采用多个measure
patterns
library(data.table)
melt(setDT(df), measure = patterns("^a", "^b", "^c"),
value.name = c("a", "b", "c"))[, variable := NULL][]