您既不需要使用行名,也不需要创建额外的 ID 列。这是一种基于训练集索引的方法。
一个示例数据集:
set.seed(1)
dat <- data.frame(Y = rnorm(10),
X1 = rnorm(10),
X2 = rnorm(10),
Z1 = rnorm(10),
Z2 = rnorm(10))
现在,您的步骤:
创建没有Z变量的分析数据集
dat2 <- dat[grep("Z", names(dat), invert = TRUE)]
dat2
# Y X1 X2
# 1 -0.6264538 1.51178117 0.91897737
# 2 0.1836433 0.38984324 0.78213630
# 3 -0.8356286 -0.62124058 0.07456498
# 4 1.5952808 -2.21469989 -1.98935170
# 5 0.3295078 1.12493092 0.61982575
# 6 -0.8204684 -0.04493361 -0.05612874
# 7 0.4874291 -0.01619026 -0.15579551
# 8 0.7383247 0.94383621 -1.47075238
# 9 0.5757814 0.82122120 -0.47815006
# 10 -0.3053884 0.59390132 0.41794156
将此数据集分解为随机训练集和测试集
train_idx <- sample(nrow(dat2), 0.8 * nrow(dat2))
train_idx
# [1] 7 4 3 10 9 2 1 5
train <- dat2[train_idx, ]
train
# Y X1 X2
# 7 0.4874291 -0.01619026 -0.15579551
# 4 1.5952808 -2.21469989 -1.98935170
# 3 -0.8356286 -0.62124058 0.07456498
# 10 -0.3053884 0.59390132 0.41794156
# 9 0.5757814 0.82122120 -0.47815006
# 2 0.1836433 0.38984324 0.78213630
# 1 -0.6264538 1.51178117 0.91897737
# 5 0.3295078 1.12493092 0.61982575
test_idx <- setdiff(seq(nrow(dat2)), train_idx)
test_idx
# [1] 6 8
test <- dat2[test_idx, ]
test
# Y X1 X2
# 6 -0.8204684 -0.04493361 -0.05612874
# 8 0.7383247 0.94383621 -1.47075238
找到我最好的模特
...
使用此模型预测训练集和测试集
...
按行重新组合训练集和测试集
idx <- order(c(train_idx, test_idx))
dat3 <- rbind(train, test)[idx, ]
identical(dat3, dat2)
# [1] TRUE
Z按列将这些数据与变量重新组合
dat4 <- cbind(dat3, dat[grep("Z", names(dat))])
identical(dat, dat4)
# [1] TRUE
综上所述,我们可以使用训练数据和测试数据的索引来将行中的数据按原始顺序组合起来。