如何转动表并分配事件对齐的ID

时间:2015-02-06 15:46:12

标签: r pivot-table

我需要完成2个可能同时处理得最好的任务。我需要转动一个简单的表,但在转动时我需要将其中一个列标准化,就像一个等级值。假设我们从按日期和事件的单位销售表开始。并非所有事件都同时发生。我们想要做的是比较事件发生时的单位销售情况,而不是事件发生的相对日期。在这个过程中,月份变得毫无意义。所以使用原始数据表,如:

 dfr <- data.frame(
  Event = c("A","B","A","C","A","B","C"),
  Month  = c("Jan","Jan","Feb","Feb","Mar","Mar","Mar"),
  Units = c(5,10,10,15,12,8,18)
  )

我需要一个生成的透视表,如:

Row | A  | B  | C

1   | 5  | 10 | 15

2   | 10 | 8  | 18

3   | 12 | na | na

我假设我可以将每个事件放入其自己的向量中,只需合并向量,但似乎应该有一个更清晰的方法来处理这些情况。

2 个答案:

答案 0 :(得分:1)

以下是tidyr的制表部分。但需要NA处理。

library(tidyr)

dfr <- data.frame(
  Event = c("A","B","A","C","A","B","C"),
  Month  = c("Jan","Jan","Feb","Feb","Mar","Mar","Mar"),
  Units = c(5,10,10,15,12,8,18)
  )

pivot <- spread(dfr[,-2],Event,Units)
pivot

答案 1 :(得分:0)

尝试

df$indx <- with(df, ave(seq_along(Event), Event, FUN=seq_along))
library(reshape2)
dcast(df, indx~Event, value.var='Units')
#   indx  A   B   C 
#1    1   5  10  15
#2    2  10   8  18
#3    3  12  NA  NA

或者

 xtabs(Units~indx+Event, df)