我从有两种条件的实验中获得了数据,其中每个参与者都在两种条件下进行了各种属性的测试。数据集为宽格式,变量名称模式如下:条件 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)
)
只要您的条件名称有一些共同的正则表达式,您就可以使用
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