如何旋转 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
我需要完成 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