将数据集转换为遵循特定名称模式的所有变量对的长格式

问题描述 投票:0回答:1

我从有两种条件的实验中获得了数据,其中每个参与者都在两种条件下进行了各种属性的测试。数据集为宽格式,变量名称模式如下:条件 A 的变量以 MM7M 开头,条件 B 的变量以 MMsf7M 开头,然后附加属性的缩写,例如MM7Mabc 和 MMsf7Mabc。 我想将数据集重塑为长格式,因此每个参与者都会获得 2 行,一行用于条件 A,一行用于条件 B;条件应该只有一列,具有值 A 和 B,并且对于每个属性,应该只有一列,以属性命名,例如abc。 因为有数百个属性,所以我想对遵循模式条件+某个属性的所有变量对自动进行旋转。非常感谢任何帮助。

library(tidyverse)

data <- tibble(
  id = c(1, 1, 2, 3),
  MM7Mabcde = c(2, 4, 2, 2),
  MMsf7Mabcde = c(4, 6, 3, 4),
  MM7Mxyz = c(2, 4, 4, 2),
  MMsf7Mxyz = c(6, 8, 9, 9),
  MM7Mtotal_c = c(6, 5, 4, 1),
  MMsf7Mtotal_c = c(12, 18, 22, 32),
  someVar = c(5, 6, 9, 9)
)
r tidyverse reshape
1个回答
0
投票

只要您的条件名称有一些共同的正则表达式,您就可以使用

names_pattern

pivot_longer(data, contains("7M"), 
             names_pattern = "^(.*7M)(.*)$",
             names_to = c("Condition", "Property"))
#> # A tibble: 24 x 5
#>       id someVar Condition Property value
#>    <dbl>   <dbl> <chr>     <chr>    <dbl>
#>  1     1       5 MM7M      abcde        2
#>  2     1       5 MMsf7M    abcde        4
#>  3     1       5 MM7M      xyz          2
#>  4     1       5 MMsf7M    xyz          6
#>  5     1       5 MM7M      total_c      6
#>  6     1       5 MMsf7M    total_c     12
#>  7     1       6 MM7M      abcde        4
#>  8     1       6 MMsf7M    abcde        6
#>  9     1       6 MM7M      xyz          4
#> 10     1       6 MMsf7M    xyz          8
#> # i 14 more rows
© www.soinside.com 2019 - 2024. All rights reserved.