我正在为 R 中的 reshape 而苦苦挣扎。我有 2 种类型的错误(err 和 rel_err),它们已针对 3 个不同的模型进行计算。这给了我总共 6 个错误变量(即 err_1、err_2、err_3、rel_err_1、rel_err_2 和 rel_err_3)。对于这些类型的错误中的每一种,我都有 3 种不同类型的预测有效性测试(即随机拒绝、回溯、预测)。我想让我的数据集很长,所以我保持 4 种类型的测试很长,同时也使两个错误测量很长。所以最后我将有一个名为 err 的变量和一个名为 rel_err 的变量以及一个 id 变量,用于错误对应的模型(1、2 或 3)
这是我现在的数据:
iter err_1 rel_err_1 err_2 rel_err_2 err_3 rel_err_3 test_type
1 -0.09385732 -0.2235443 -0.1216982 -0.2898543 -0.1058366 -0.2520759 random
1 0.16141630 0.8575728 0.1418732 0.7537442 0.1584816 0.8419816 back
1 0.16376930 0.8700738 0.1431505 0.7605302 0.1596502 0.8481901 front
1 0.14345986 0.6765194 0.1213689 0.5723444 0.1374676 0.6482615 random
1 0.15890059 0.7435382 0.1589823 0.7439204 0.1608709 0.7527580 back
1 0.14412360 0.6743928 0.1442039 0.6747684 0.1463520 0.6848202 front
这是我希望它的样子:
iter model err rel_err test_type
1 1 -0.09385732 (#'s) random
1 2 -0.1216982 (#'s) random
1 3 -0.1216982 (#'s) random
然后……
我试过玩弄语法,但不能完全弄清楚 time.variing 参数
非常感谢您提供的任何帮助。
最佳答案
你可以用“困难”的方式做到这一点。为了透明,您可以使用名称。
with( dat, data.frame(iter = rep(iter, 3),
model = rep(1:3, each = nrow(dat)),
err = c(err_1, err_2, err_3),
rel_err = c(rel_err_1, rel_err_2, rel_err_3),
test_type = rep(test_type, 3)) )
或者,为了简洁起见,索引。
data.frame(iter = dat[,1], model = rep(1:3, each = nrow(dat)), err = dat[,c(2, 4, 6)],
rel_err = dat[,c(3, 5, 7)], test_type = dat[,8]) )
如果您有很多列,那么困难的方法可能涉及 grep 列名。
这种“艰难”的方式与
reshape
一样简洁并且不需要考虑如何使用命令。有时我只是跳过思考 reshape
.
关于在 R 中将数据帧 reshape 为长格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13061737/