如何根据r中数据框中的另一个变量将二进制变量添加到数据框?

时间:2014-02-23 02:42:24

标签: r performance dataframe

我的数据(火车)是一个443402 x 27数据框,我已经将一个新的二进制变量系列$ researchfromplan初始化为“1”。有64,673个唯一列车$ customer_ID(每个客户在数据框中随机输入次数 - 但是按顺序排列。即第一个客户有前9行,第二个客户有下6个,等等。)

> train[1:20,c(1,27)]
> customer_ID researchedplan
1     10000000              1
2     10000000              1
3     10000000              1
4     10000000              1
5     10000000              1
6     10000000              1
7     10000000              1
8     10000000              1
9     10000000              1
10    10000005              1
11    10000005              1
12    10000005              1
13    10000005              1
14    10000005              1
15    10000005              1
24    10000013              1
25    10000013              1
26    10000013              1
27    10000013              1
28    10000014              1

我还有一个向量(diff_than_researched),它包含一些特殊列车$ customer_ID的字符串,用于标识哪些客户未研究特定计划。 对于diff_than_researched中与train $ customer_ID中的字符串匹配的字符串,我想为客户的所有条目训练$ researchfromplan为“0”。 e.g:

> head(diff_than_researched)
>[1] "10000019" "10000033" "10000036" "10000037" "10000055" "10000075"

所以,对于所有“10000019”条目,我想将$ researchfromplan训练为等于“0”。

现在,我可以使用“for循环”完成所有操作,但循环这么多条目需要很长时间:

  

for(i in 1:17210){     train $研究计划[train $ customer_ID == diff_than_researched [i]]< - 0   }

1 个答案:

答案 0 :(得分:0)

使用略有不同的数据以提高可读性并在研究计划中获得0分。

train

##    customer_ID
## 1     10000000
## 10    10000005
## 24    10000013
## 28    10000014
## 5     10000019    

train$researchedplan <- as.numeric(!train$customer_ID %in% diff_than_researched)

##    customer_ID researchedplan
## 1     10000000              1
## 10    10000005              1
## 24    10000013              1
## 28    10000014              1
## 5     10000019              0

如@rawr在评论中所述,首先检查每个customer_ID是否在diff_than_researched中,然后否定operator precedence引起的逻辑向量。