转置特定列,同时在 R 中保留第一列完整(重复)

Transpose specific columns while leaving first columns intact (with duplicates) in R

我是 Whosebug 的新手,所以我希望我正确地标记了主题。 另外,我一般都是编程新手,所以我的步骤可能不太合乎逻辑。

我有以下数据框(但更大):

df <- data.frame(location = c("a", "a", "a", "b", "b"),
                   date = c("2017-05-01", "2017-05-02", "2017-05-03", "2017-05-01", "2017-05-02"),
                   average1 = c(246, 233, 257, 290, 307),
                   average2 = c(134, 256, 315, 346, 312),
                   average3 = c(214, 315, 233, 249, 216))

我想转置平均值,但也希望将它们与它们的位置和日期相关联。 数据帧的前两行将像这样结束:

location date   ave_interval   average
a   2017-05-01  average1    246
a   2017-05-01  average2    134 
a   2017-05-01  average3    214
a   2017-05-02  average1    233
a   2017-05-02  average2    256
a   2017-05-02  average3    315
etc

有人知道如何编码吗?

我试过以下: 我制作了一个单独的数据 table,其中只有位置、日期和平均值 1,因为我不知道如何计算所有平均值。

尝试 1:

> recast(df, date + average1 ~ am, id.var = c("location", "date"))

给我以下错误:

Error in FUN(X[[i]], ...) : object 'average1' not found

names(df) gives me (mind the strange spacing): 
 "location" "datum"    "average1"

is.numeric(df$average1)
[1] TRUE
exists("df$average1")
[1] FALSE

尝试2:

df.new < -reshape(df,dir='w',idvar=c('location','date'),timevar='average1');
Error in Ops.data.frame(df.new, -reshape(df, dir = "w", idvar = c("location",  : 
  ‘<’ only defined for equally-sized data frames
In addition: Warning messages:
1: In Ops.factor(left) : ‘-’ not meaningful for factors
2: In Ops.factor(left) : ‘-’ not meaningful for factors

总结: 如何编码某些列的转置并将标题名称转移到列“ave_interval”?我的 header 名称可能有问题吗?

提前致谢。

这是 pivot_longer

的工作
library(dplyr)
df %>% 
    pivot_longer(cols = c("average1", "average2", "average3"),
                 names_to = "average_interval", values_to = "average")
# A tibble: 15 x 4
   location date       average_interval average
   <fct>    <fct>      <chr>              <dbl>
 1 a        2017-05-01 average1             246
 2 a        2017-05-01 average2             134
 3 a        2017-05-01 average3             214
 4 a        2017-05-02 average1             233
 5 a        2017-05-02 average2             256
 6 a        2017-05-02 average3             315
 7 a        2017-05-03 average1             257
 8 a        2017-05-03 average2             315
 9 a        2017-05-03 average3             233
10 b        2017-05-01 average1             290
11 b        2017-05-01 average2             346
12 b        2017-05-01 average3             249
13 b        2017-05-02 average1             307
14 b        2017-05-02 average2             312
15 b        2017-05-02 average3             216