【发布时间】:2016-11-19 17:02:21
【问题描述】:
我有下表,original_table,它是通过比较 vector_1 和 vector_2 的相同索引中数字对的频率得出的:
vector_1 <- c(5, 6, 5, 4, 6, 6, 4, 1, 6, 7, 5, 3, 3, 4, 4, 7, 7, 7, 2, 7, 2, 6, 1)
vector_2 <- c(1, 2, 1, 3, 4, 4, 4, 2, 4, 7, 2, 5, 5, 3, 3, 6, 7, 7, 6, 3, 6, 7, 2)
original_table <- table(vector_1, vector_2)
str(original_table)
vector_2
vector_1 1 2 3 4 5 6 7
1 0 2 0 0 0 0 0
2 0 0 0 0 0 2 0
3 0 0 0 0 2 0 0
4 0 0 3 1 0 0 0
5 2 1 0 0 0 0 0
6 0 1 0 3 0 0 1
7 0 0 1 0 0 1 3
我正在尝试重新编码vector_1 的值,以最大化vector_2 中具有相同索引的值的相同数字对的数量。我最终试图重新编码这些以使用Breckenridge (2000) 描述的双拆分交叉验证。
唯一的“规则”是每个值都必须重新编码为唯一值,因此1 和2 不能都重新编码为3。
我使用car::recode 或多或少地手动完成了这项工作:
vector_1 <- car::recode(vector_1, "6 = 4; 7 = 7; 4 = 3; 5 = 1; 3 = 5; 2 = 6; 1 = 2")
optimized_table <- table(vector_1, vector_2)
str(optimized_table)
vector_2
vector_1 1 2 3 4 5 6 7
1 2 1 0 0 0 0 0
2 0 2 0 0 0 0 0
3 0 0 3 1 0 0 0
4 0 1 0 3 0 0 1
5 0 0 0 0 2 0 0
6 0 0 0 0 0 2 0
7 0 0 1 0 0 1 3
这样做至少有几个问题:我目睹了它,所以我不确定这是最大化向量之间对的总数的最佳方法,而且它不容易重现一组不同的数据。我正在寻找一种方法来更好/更自动地做到这一点,但我无法轻易找到一种程序化或智能的方法来做到这一点。
【问题讨论】:
标签: r optimization matrix