Как добавить двоичную переменную в кадре данных на основе другой переменной в кадре данных в г?

голоса
0

Мой данные (ж) представляет собой кадр данных 443402 х 27 и я инициализируется новые двоичные переменные поезда $ researchedplan, на «1». Есть 64673 уникальный поезд $ 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, которые соответствуют строкам в поезде $ customer_id, я хотел бы поезд $ 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}

Задан 23/02/2014 в 00:42
источник пользователем
На других языках...                            


1 ответов

голоса
0

Используя несколько различных данных для удобства чтения и получить некоторые 0s в исследуемом плане.

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то , что сводит на нет логического вектора из - за приоритета операторов .

Ответил 23/02/2014 в 09:15
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more