R:使用 for 循环修改 data.table 中现有变量的问题;循环不影响行过滤

R: Problem using a for loop to modify existing variables in a data.table; the loop does not affect the row filtering

我要完成的任务如下: 我有一个包含数百个变量的数据集。我需要按照相同的逻辑重新编码所有这些。逻辑如下:如果 GIVEN VARIABLE == 0 & a SPECIFIC VARIABLE == 1,则 GIVEN VARIABLE 必须= -1SPECIFIC VARIABLE 对它们都是一样的。

我所做的如下:

set.seed(123)
data=data.table(a = 0:10, b= 0:10, c = 0:10, d = 1:0)

此处“d”是特定变量,a:c是给定变量

list_variables <- names(data)  
list_variables_v2 <- list_variables[-c(4)] 

我从数据集中提取了变量的名称(减去 d)并将它们放在一个列表中,这样它们就可以被送入循环

data_v1 = copy(d)     

for(i in (list_variables_v2)) {
  data_v1[(i) == 0 & d == 1, (i) := -1]
}

有问题的是,当我 运行 循环时什么也没有发生。那些符合条件的变量(例如 a == 0 & d == 1)不会重新编码为 -1。可能会发生各种问题,但我想我已将它们减少为一个。潜在问题:

a) 即使在循环之外,代码也不起作用。但是这是错误的。以下代码产生预期结果:

data_v1[a == 0 & d == 1, a := -1]

b) 循环不工作,因此,变量名没有真正排序和识别。尽管如此,如果我排除 (i) == 0 条件,代码确实有效,这意味着循环适用于右侧:

for(i in (list_variables_v2)) {
  data_v1[d == 1, (i) := -1]
}

我认为问题的根源在于行过滤端的 R 没有将 (i) == 0 识别为例如a == 0。这很奇怪,因为 R 在处理右侧(列)时确实将 (i) := -1 识别为例如一个:= -1。知道是什么原因造成的吗?希望如何解决?

再次非常感谢,如果有不清楚或重复的地方,请告诉我。

一个简单的更正是用 get

换行
for(i in (list_variables_v2)) {
  data_v1[get(i) == 0 & d == 1, (i) := -1]
}

-输出

> data_v1
        a     b     c     d
    <int> <int> <int> <int>
 1:    -1    -1    -1     1
 2:     1     1     1     0
 3:     2     2     2     1
 4:     3     3     3     0
 5:     4     4     4     1
 6:     5     5     5     0
 7:     6     6     6     1
 8:     7     7     7     0
 9:     8     8     8     1
10:     9     9     9     0
11:    10    10    10     1

> data
        a     b     c     d
    <int> <int> <int> <int>
 1:     0     0     0     1
 2:     1     1     1     0
 3:     2     2     2     1
 4:     3     3     3     0
 5:     4     4     4     1
 6:     5     5     5     0
 7:     6     6     6     1
 8:     7     7     7     0
 9:     8     8     8     1
10:     9     9     9     0
11:    10    10    10     1