【问题标题】:R: Covernt a complex time series dataframe to longR:将复杂的时间序列数据帧转换为长
【发布时间】:2021-03-02 01:17:47
【问题描述】:

这是给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 个小时我在论坛上寻找答案,但没有成功。

非常感谢任何帮助! 谢谢

【问题讨论】:

  • 你能用dput展示一个可重现的小例子吗
  • 感谢 akrun...我已尝试编辑我的评论并插入代码。如果这不是您要求的,我很抱歉。我尝试粘贴 dput 输出,但收到一条消息说它太长了。我是 R 和 stackoverflow 的新手,但我仍然掌握了一些知识。
  • 嗨 RTERG,欢迎来到 StackOverflow。请参阅 stackoverflow.com/help/minimal-reproducible-example 和 stackoverflow.com/questions/5963269/…,了解用户在要求可重现示例时的含义。您应该使用dput() 或显示用于构造它的代码来包含数据集示例的结构,例如:a = c(1,2,3) b = c(2,4,5) data = data.frame(a=a, b=b) 或类似的东西。

标签: r dplyr tidy data-wrangling


【解决方案1】:

你可以从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)

【讨论】:

    猜你喜欢
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 2017-04-09
    • 2018-02-08
    • 2017-12-13
    相关资源
    最近更新 更多