2014-02-23 4 views
0

내 데이터 (열차)는 443402 x 27 데이터 프레임이고 새로운 이진 변수 열 $ researchedplan을 "1"로 초기화했습니다. 64,673 건의 고유 한 train $ customer_ID가 있습니다 (각 고객은 데이터 프레임에 임의의 시간을 입력했으나 순서대로 첫 번째 고객은 첫 번째 9 행을, 두 번째 고객은 다음 6을 가짐).r에있는 데이터 프레임의 다른 변수를 기반으로 데이터 프레임에 이진 변수를 추가하는 방법은 무엇입니까?

> 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 

는 또한 고객이 특정 계획을 연구하지 않았다 식별 독특한 기차 $의 CUSTOMER_ID 년대의 문자열 포함하는 벡터 (diff_than_researched)가 있습니다. Train $ customer_ID의 문자열과 일치하는 diff_than_researched의 문자열에 대해 train $ researchedplan을 사용하여 고객의 모든 항목이 "0"이되도록하십시오. 예컨대 :

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

그래서, "10000019"모든 항목에 대해, 나는 기차 $의 researchedplan이 "0"과 동일하고 싶습니다. 이제

, 나는 모두와 함께이 작업을 수행 할 수 있지만, 너무 많은 항목을 통해 루프를 너무 오래 걸립니다 "루프"에 대한

(전 1 : 17210) { 기차 $의 researchedplan [ 기차 $ CUSTOMER_ID ==는 diff_than_researched [I]] <-0 }

+0

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

+0

환상적입니다 - 감사합니다! – user3342282

+0

@JakeBurkhead 왜 '!'는'% in %'의 평가 후에 적용되며'! train $ customer'가 아닌가요? – rawr

답변

0

약간 다른 데이터 가독성 및 연구 계획에 약간의 0을 얻을 사용.

customer_IDdiff_than_researched에 있는지 점검이 제 코멘트에 의해 @rawr 바와 같이
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 

는 논리 벡터 인해 operator precedence 니 게이트시킨다.

관련 문제