2015-11-06 8 views
0

У меня есть огромный набор данных с информацией о клиентах, посещающих супермаркет. У каждого клиента есть уникальный идентификатор клиента, и клиент может вернуться в супермаркет сколько угодно раз. Я хочу создать набор функций для каждого идентификатора клиента таким образом, чтобы я мог отфильтровать, сколько раз клиент посещал супермаркет.Создание нескольких столбцов на основе значений строк для разных таблиц

У меня есть таблица с множеством колонн TripType, VisitNo, Upc, Weekday и т.д. Я создал таблицу и превратил его в кадр данных, чтобы вычислить частоту. Теперь я хочу создать несколько столбцов каждого Идентификатора клиента с более чем двумя посещениями, и в наборе данных поезда имеется не менее 6000 таких переменных.

head(train,6) 
TripType VisitNo Upc 
    40  5  1100 
    30  7  1101 
    20  9  1101 
    20  11  1102 
    10  13  1103 
    5  15  1102 

Уникальный идентификатор клиента - Upc. Клиент 1101, 1102 посетил дважды.

df <- data.frame(table(train$Upc)) 
head(df,4) 
Var1 Freq 
1101 1 
1101 2 
1102 2 
1103 1 

Теперь я хочу, чтобы создать столбцы в моих данных поездов набор этих переменных, частота больше 2. Таким образом, мой желаемый результат будет (функция реинжиниринг)

TripType VisitNo Upc 1101 1102 
40  5  1100 0  0 
30  7  1101 1  0 
20  9  1101 1  0 
20  11  1102 0  1 
10  13  1103 0  0 
    5  15  1102 0  1 

Есть только слишком много функций для создания столбцов вручную. Любая помощь приветствуется. Спасибо.

ответ

1

У меня есть частичное решение. Надеюсь, это по крайней мере поможет вам, особенно учитывая тот факт, что никто не ответил.

r<-as.vector(subset(data.frame(table(train$Upc)), Freq>=2)[,1]) 
#selects relevant customers id in one vector. 
#If greater than 2 needed remove equal sign in Freq>=2 

train[,r] <- NA 
#creates columns with selected IDs in the data frame 

train[,4]<-train$Upc==colnames(train)[4] 
# 4 is the number of columns in your original data frame +1 

Последняя строка представит данные, как вы хотите, для первого выбранного клиента. На данный момент у меня нет другого решения, кроме как вручную изменить 4s в последней строке с 5,6 и т. Д. для последующих клиентов. Я понимаю, что это не оптимально, если у вас их много. Функция должна решить его, но я не мог понять это. Но я подумал, что вы можете выбрать здесь и задать еще один вопрос об этом, о котором можно было бы надеяться.

Смежные вопросы