r语言 - 创建基于多个变量的长格式数据框架



我有一个Dataframe,看起来大致像这样:

my_data <- tribble(
~Main, ~VAR1a, ~VAR1b, ~VAR1c, ~VAR2a, ~VAR2b, ~VAR2c,
"A", "B", "C", "D", 1, 1, 1,
"B", "A", "D", "", 1, 2, NA,
"C", "D", "A", "", 2, 1, NA
)
# A tibble: 3 x 7
Main  VAR1a VAR1b VAR1c VAR2a VAR2b VAR2c
<chr> <chr> <chr> <chr> <dbl> <dbl> <dbl>
1 A     B     C     "D"       1     1     1
2 B     A     D     ""        1     2    NA
3 C     D     A     ""        2     1    NA

我想要基于VAR1a,VAR1bVAR1c更长时间地透视这个数据框架。这很容易做到:

my_data %>%
pivot_longer(names_to = c("VAR1"),
cols = c("VAR1a", "VAR1b", "VAR1c"))
# A tibble: 9 x 6
Main  VAR2a VAR2b VAR2c VAR1  value
<chr> <dbl> <dbl> <dbl> <chr> <chr>
1 A         1     1     1 VAR1a "B"  
2 A         1     1     1 VAR1b "C"  
3 A         1     1     1 VAR1c "D"  
4 B         1     2    NA VAR1a "A"  
5 B         1     2    NA VAR1b "D"  
6 B         1     2    NA VAR1c ""   
7 C         2     1    NA VAR1a "D"  
8 C         2     1    NA VAR1b "A"  
9 C         2     1    NA VAR1c ""  

我的问题是,然而,列VAR2a,VAR2bVAR2cVAR1a,VAR1bVAR1c直接相关(因此,变量数后面的字母表示关联)。例如,VAR2aMain赋给VAR1a的值,以此类推。

理想情况下,我希望有这样的东西:

# A tibble: 9 x 4
Main  value VAR1   VAR2
<chr> <chr> <chr> <dbl>
1 A     "B"   VAR1a     1
2 A     "C"   VAR1b     1
3 A     "D"   VAR1c     1
4 B     "A"   VAR1a     1
5 B     "D"   VAR1b     2
6 B     ""    VAR1c    NA
7 C     "D"   VAR1a     2
8 C     "A"   VAR1b     1
9 C     ""    VAR1c    NA

我不知道如何用pivot_longer()做到这一点,或者是否可以用tidyverse做到这一点。

您可以尝试将pivot_longer作为-

tidyr::pivot_longer(my_data, 
cols = starts_with('VAR'), 
names_to = '.value', 
names_pattern = '(VAR\d+)')
#  Main  VAR1   VAR2
#  <chr> <chr> <dbl>
#1 A     "B"       1
#2 A     "C"       1
#3 A     "D"       1
#4 B     "A"       1
#5 B     "D"       2
#6 B     ""       NA
#7 C     "D"       2
#8 C     "A"       1
#9 C     ""       NA

最新更新