dat <- data.frame(
学生 = c("小王", "小张"),
语文_期中 = c(90, 89),
数学_期中 = c(80, 81),
语文_期末 = c(88, 87),
数学_期末 = c(92, 93)
)
dat
#> 学生 语文_期中 数学_期中 语文_期末 数学_期末
#> 1 小王 90 80 88 92
#> 2 小张 89 81 87 93
dat <- reshape(
dat,
direction = "long",
idvar = "学生",
timevar = "科目_考期",
times = colnames(dat)[-1],
v.names = "分数",
varying = list(2:5)
)
rownames(dat) <- NULL
dat
#> 学生 科目_考期 分数
#> 1 小王 语文_期中 90
#> 2 小张 语文_期中 89
#> 3 小王 数学_期中 80
#> 4 小张 数学_期中 81
#> 5 小王 语文_期末 88
#> 6 小张 语文_期末 87
#> 7 小王 数学_期末 92
#> 8 小张 数学_期末 93
dat[, c("科目", "考期")] <- read.table(text = dat$科目_考期, sep = "_")
dat[, "科目_考期"] <- NULL
dat <- reshape(
dat,
direction = "wide",
idvar = c("学生", "考期"),
timevar = "科目",
sep = "_"
)
dat
#> 学生 考期 分数_语文 分数_数学
#> 1 小王 期中 90 80
#> 2 小张 期中 89 81
#> 5 小王 期末 88 92
#> 6 小张 期末 87 93
<sup>Created on 2021-10-09 by the reprex package (v2.0.0)</sup>