R 使用 DPLYR 和存根重塑

问题描述 投票:0回答:1
DATA=data.frame(    STUDENT =c(1, 2, 3),    
                 GRADE1 =c(7, 3, NA),   
                 GRADE2 =c(6, 5, 9),    
                 GRADE3 =c(4, NA, 2),   
                 GYM1   =c(2, 0, NA),   
                 GYM2   =c(9, 7, 7),    
                 GYM3   =c(1, NA, 6))   

DATAWANT = data.frame(  STUDENT =c(1, 1, 1, 2, 2, 3, 3),    
                       TIME =c(1, 2, 3, 1, 2, 2, 3),    
                       GRADE    =c(7, 6, 4, 3, 5, 9, 2),    
                       GYM  =c(2, 9, 1, 0, 7, 7, 6))

我有 DATA,希望通过将宽整形为长整形并以 STUBS(GRADE、GYM)作为列,将值作为单元格值来创建 DATAWANT。我的尝试,没有成功

library(tidyr)

DATAWANT.TRY=pivot_longer(DATA, 
                    cols = -c(STUDENT), 
                    names_to = c('CLASS', 'GRADE'), 
                    names_pattern = '(.*?)_([A-Z])_Grade(\\d+)', 
                    values_to = 'Score')
r dplyr data.table tidyverse
1个回答
0
投票
library(tidyr)
pivot_longer(DATA, 
             cols = -c(STUDENT), 
             names_to = c('.value', 'TIME'), 
             names_pattern = '(.*)(\\d+)', 
             values_to = 'Score',
             values_drop_na = TRUE)

#   STUDENT TIME  GRADE   GYM
# 1       1 1         7     2
# 2       1 2         6     9
# 3       1 3         4     1
# 4       2 1         3     0
# 5       2 2         5     7
# 6       3 2         9     7
# 7       3 3         2     6
© www.soinside.com 2019 - 2024. All rights reserved.