【问题标题】:Turn wide format into longitudinal data format将宽格式转换为纵向数据格式
【发布时间】:2023-02-14 22:55:57
【问题描述】:

我有一个没有时间变量的宽格式数据集,我想创建一个时间变量并将其转换为长格式以进行纵向分析。 原始数据集如下所示:

id <- c(1,2,3)
pdq1 <- c(3,5,6)
pdq2 <- c(1,3,4)
pdq3 <- c(4,5,4)
scor_abp1 <- c(1,2,3)
scor_abp2 <- c(2,2,4)
scor_abp3 <- c(1,4,5)
dat <- data.frame(id,pdq1,pdq2,pdq3,scor_abp1,scor_abp2,scor_abp3)

期望的输出:

id <- c(1,1,1,2,2,2,3,3,3)
time <- c(1,2,3,1,2,3,1,2,3)
pdq <- c(3,1,4,5,3,5,6,4,4)
abp <- c(1,2,1,2,2,4,3,4,5)
dat <- data.frame(id,time,pdq,abp)

pdq 和 scor_abp 是两种不同的度量。 后缀为 1 的变量表示它是在时间 1 测量的,后缀为 2 的变量表示它是在时间 2 测量的,依此类推。

我将不胜感激所有的帮助!!!提前致谢!

【问题讨论】:

  • 还请提供所需的输出,以便清楚您到底需要什么。你试过什么了吗?这看起来像pivot_longer的经典案例

标签: r longitudinal


【解决方案1】:

当您有多个要旋转的列时,您可以在 pivot_longer 中使用 .value。在names_to 中,".value" 与您要旋转的多个列相关,后面跟着一个数字(时间列)。这一切都需要在names_tonames_pattern 参数中设置。

tidyr::pivot_longer(dat,
                    -id,
                    names_to = c(".value", "time"),
                    names_pattern = "(pdq|scor_abp)(\d)")

# A tibble: 9 × 4
     id time    pdq scor_abp
  <dbl> <chr> <dbl>    <dbl>
1     1 1         3        1
2     1 2         1        2
3     1 3         4        1
4     2 1         5        2
5     2 2         3        2
6     2 3         5        4
7     3 1         6        3
8     3 2         4        4
9     3 3         4        5

【讨论】:

  • 谢谢!这非常有效!
猜你喜欢
  • 1970-01-01
  • 2023-02-25
  • 1970-01-01
  • 2017-07-07
  • 2015-07-18
  • 2022-01-26
  • 2021-07-20
相关资源
最近更新 更多