如何旋转 table 并分配事件对齐 ID

How to both pivot a table and assign event aligned IDs

我需要完成 2 项可能最好同时处理的任务。我需要旋转一个简单的 table,但在旋转时我需要对其中一列进行标准化,就像排序值一样。假设我们从按日期和事件的 table 单位销售额开始。并非所有事件都同时发生。我们想要做的是比较不同事件的单位销售额,而不是按日期而是按事件发生的相对日期。在这个过程中,月份变得毫无意义。因此,原始数据 table 如:

 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)
  )

我需要一个结果透视 table 像:

Row | A  | B  | C

1   | 5  | 10 | 15

2   | 10 | 8  | 18

3   | 12 | na | na

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

尝试

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)

这里是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