【问题标题】:Merge and append rows within a dataframe in R在 R 中的数据框中合并和追加行
【发布时间】:2014-05-09 09:57:12
【问题描述】:

我已经阅读了很多主题,并且认为我的问题以前没有被问过。我在 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。我只是想做一些连接。研究表明cbindtapply 函数可能有用。

感谢您的帮助。我对 R 很陌生。

【问题讨论】:

  • 也许是dcast 例如:cookbook-r.com/Manipulating_data/…
  • 现在看。感谢您的快速回复,并帮助我格式化问题,以便示例数据框易于阅读。
  • 不幸的是,dcast 功能似乎在这里不起作用。它似乎是为了获取值并将它们转换为列标题。例如,它会为每个成本创建一个新列。
  • 大多数人试图避免你正在尝试做的事情;拥有一个长数据表可以让 R 中的很多事情变得更容易。您预见到哪些功能或分析可以更容易地将所有内容放在一条线上?
  • 我正在尝试进行回归分析,以找出促使人们购买给定产品的因素。是报价的数量,是否与他们看到的最后一个报价相关的某些条件,是否与他们购买的报价和之前的报价之间的时间有关?我想计算有关他们看到的不同优惠的各种统计数据,并且我还想确定每个客户的优惠之间的关系。在我看来,最简单的方法是先压缩成一行。

标签: r aggregate reshape tapply cbind


【解决方案1】:

您实际上是在要求对数据进行“长”到“宽”的重塑。

在我看来,您使用“Cust”、“age”、“state”和“Product”作为您的 ID 变量。但是,您没有实际的“时间”变量(“时间”,如上面提到的 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

从那里开始,使用 base 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

【讨论】:

    猜你喜欢
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 2012-04-06
    • 2019-03-01
    • 1970-01-01
    相关资源
    最近更新 更多