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')
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