Слияние и добавление строк в рамках данных в R
Я прочитал многие темы и не думаю, что мой вопрос задавался раньше. у меня есть data.frame
в R, связанные с рекламными объявлениями, показанными клиентам как таковые:.. У меня много клиентов, 8 различных продуктов.. так что это всего лишь образец
mydf <- data.frame(Cust = c(1, 1), age = c(24, 24),
state = c("NJ", "NJ"), Product = c(1, 1), cost = c(400, 410),
Time = c(35, 25), Purchased = c("N", "Y"))
mydf
# Cust age state Product cost Time Purchased
# 1 1 24 NJ 1 400 35 N
# 2 1 24 NJ 1 410 23 Y
И я хочу, чтобы это выглядело так...
Cust | age | state | Product | cost.1 | time.1 | purch.1 | cost.2 | time.2 | purch.2
1 | 24 | NJ | 1 | 400 | 35 | N | 410 | 23 | Y
Как я могу это сделать? Есть несколько статических переменных для каждого клиента, таких как возраст, состояние и несколько других... и затем есть детали, связанные с каждым предложением, которое было представлено данному клиенту, номер продукта в предложении, стоимость, время, и если они приобрели его... я хочу, чтобы все это было в одной строке для каждого клиента, чтобы выполнить анализ.
Стоит отметить, что количество товаров максимально достигает 7, но для некоторых клиентов оно колеблется от 1 до 7.
У меня нет примера кода, чтобы действительно показать. Я пытался использовать aggregate
функция, но я не хочу агрегировать или делать какие-либо суммы. Я просто хочу сделать несколько соединений. Исследования показывают, что cbind
, а также tapply
функции могут быть полезны.
Спасибо за помощь. Я очень плохо знаком с Р.
1 ответ
По сути, вы просите сделать "длинную" или "широкую" перестройку ваших данных.
Мне кажется, что вы используете "Cust", "age", "state" и "Product" в качестве переменных идентификатора. Однако у вас нет фактической переменной времени ("время", как при последовательном подсчете записей по идентификаторам, указанным выше). Однако такую переменную легко создать:
mydf$timevar <- with(mydf,
ave(rep(1, nrow(mydf)),
Cust, age, state, Product, FUN = seq_along))
mydf
# Cust age state Product cost Time Purchased timevar
# 1 1 24 NJ 1 400 35 N 1
# 2 1 24 NJ 1 410 23 Y 2
Оттуда это довольно просто с reshape
функция в базе R.
reshape(mydf, direction = "wide",
idvar=c("Cust", "age", "state", "Product"),
timevar = "timevar")
# Cust age state Product cost.1 Time.1 Purchased.1 cost.2 Time.2 Purchased.2
# 1 1 24 NJ 1 400 35 N 410 23 Y