关于R for循环和if语句的实际问题

时间:2019-05-14 14:17:50

标签: r for-loop if-statement

首先,我获得了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 +。

我知道代码一定有问题,但是我不知道在哪里...

1 个答案:

答案 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将它们设置为零