我已阅读了许多主题,并且认为之前没有问过我的问题。我在R中有data.frame
与向客户展示的广告相关:..我有很多客户,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
函数,但我不想聚合,也不想使用任何SUM。我只想做一些加入。研究表明,cbind
和tapply
函数可能很有用。
感谢您的帮助。我是R.的新手。
答案 0 :(得分:0)
你基本上要求做一个&#34; long&#34;到&#34;宽&#34;重塑您的数据。
在我看来,你喜欢使用&#34; Cust&#34;,&#34; age&#34;,&#34; state&#34;,&#34;&#34; Product&#34;作为你的ID变量。你没有真正的&#34;时间&#34;变量虽然(&#34;时间&#34;如在上面提到的ID的记录的顺序计数中)。但是,这样的变量很容易创建:
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
从那里开始,使用基础R中的reshape
函数非常简单。
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