首先,我获得了2个最初是字符的功能。
train_address = train$address
test_address = test$address
然后将它们绑定在一起。
address = c(train_address, test_address)
然后将其从字符更改为整数,因为稍后我将对它们进行虚拟处理并且希望更快地处理它(那些字符不是英语)
train_address = as.integer(factor(train_address, levels = unique(address)))
test_address = as.integer(factor(test_address, levels = unique(address)))
现在,这是问题所在。代码如下所示。
我的目标是将所有在训练中而不是在测试中的数据都传输到0。
for (a in train_address) {
if (!(train_address[a] %in% test_address)) {
train_address[a] = 0
}
}
train_address = as.factor(train_address)
test_address = as.factor(test_address)
以这种方式处理数据后,应该是:
测试因数+1 =火车因数
(因为R从1开始,所以直到我通过上面的for循环传输火车中的某些数据后才使用0)
但是实际上,训练因子和测试因子的数量差是400 +。
我知道代码一定有问题,但是我不知道在哪里...
答案 0 :(得分:1)
以下应该可以解决问题。
您不需要为此进行循环,而是使用矢量化操作。
train_address[!(train_address %in test_address)] <- 0
说明:
(train_address %in test_address)
给出布尔矢量,其中TRUE
表示train_address
中的元素位于test_address
!
否定了布尔向量
train_address[!(train_address %in test_address)]
给出了train_address中所有不在test_address中的元素。
最后,您通过我们的命令train_address[!(train_address %in test_address)] <- 0
将它们设置为零