【问题标题】:Create a long format dataframe based on multiple variables [duplicate]基于多个变量创建长格式数据框[重复]
【发布时间】:2021-09-06 15:27:06
【问题描述】:

我有一个大致如下所示的 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

我想根据VAR1aVAR1bVAR1c 将这个数据框旋转更长的时间。 这很容易做到:

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 ""  

然而,我的问题是,VAR2aVAR2bVAR2c 列与 VAR1aVAR1bVAR1c 直接相关(因此,变量编号后面的字母显示协会)。例如,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。

【问题讨论】:

    标签: r dataframe tidyverse


    【解决方案1】:

    你可以试试pivot_longer as -

    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
    

    【讨论】:

      猜你喜欢
      • 2017-10-13
      • 2016-05-19
      • 2016-11-01
      • 2020-11-28
      • 1970-01-01
      • 1970-01-01
      • 2019-07-01
      • 2020-05-07
      • 2020-12-15
      相关资源
      最近更新 更多