R:将复杂的时间序列数据帧转换为长

R: Covernt a complex time series dataframe to long

这是给R的

date <- seq(as.Date("2020/03/11"), as.Date("2020/03/16"), "day")

x_pos_a <- c(1, 5, 4, 9, 0)

x_pos_b <- c(2, 6, 9, 5, 4)

like so [...]

我有一个包含 69 个时间点的时间序列数据框。数据框中的行是日期。 从三个人群(A、B、C)测量了四个变量(pos、anx、ang、sad)。从每个群体 (x, y, z) 中抽取三个样本。目前,变量、人口和样本的每个组合都在数据框中形成一个列。例如,“x_pos_A”、“x_pos_B”、“x_pos_C”、x_anx_A“...”z_sad_b、“z_sad_c” ".

我想把它改造成下面的形状

“日期”“变量”“人口”“样本”“值”

我花了最后 3 个小时在论坛上搜索答案,但没有成功。

非常感谢任何帮助! 谢谢

您可以使用 tidyr 中的 pivot_longer :

tidyr::pivot_longer(df, 
                    cols = -date,
                    names_to = c('sample', 'variable', 'population'), 
                    names_sep = '_')

#    date       sample variable population value
#   <date>     <chr>  <chr>    <chr>      <dbl>
# 1 2020-03-11 x      pos      a              1
# 2 2020-03-11 x      pos      b              2
# 3 2020-03-12 x      pos      a              5
# 4 2020-03-12 x      pos      b              6
# 5 2020-03-13 x      pos      a              4
# 6 2020-03-13 x      pos      b              9
# 7 2020-03-14 x      pos      a              9
# 8 2020-03-14 x      pos      b              5
# 9 2020-03-15 x      pos      a              0
#10 2020-03-15 x      pos      b              4 

数据

date <- seq(as.Date("2020/03/11"), as.Date("2020/03/15"), "day")
x_pos_a <- c(1, 5, 4, 9, 0)
x_pos_b <- c(2, 6, 9, 5, 4)
df <- data.frame(date, x_pos_a, x_pos_b)