在动态图表中使用有序因子作为时间变量

Using a ordered factor as timevar in Motion Chart

我有一些这样的数据:

  time var1 var2 idvar
1   Q1    1    4     A
2   Q1    2    3     B
3   Q2    3    2     A
4   Q2    4    1     B

我需要使用每个季度(Q1Q2)作为时间变量来制作 MotionChart。我试图使 df$time 成为有序因子,但它仍然给我一个错误,因为 timevar 需要采用数字或日期格式。有什么解决方法吗?我的实际数据跨越几年,每年的所有 4 个季度都采用 YYYYQn 格式,我不想更改。

我在这个例子中使用的代码:

library(googleVis)

df = data.frame(time = c("Q1","Q1","Q2","Q2"),var1 = c(1,2,3,4),var2=c(4,3,2,1),idvar=c("A","B","A","B"))
df$time =  ordered(df$time)
g = gvisMotionChart(df,timevar="time",idvar="idvar")

输出错误:

Error : The timevar has to be of numeric or Date format. Currently it is  orderedThe timevar has to be of numeric or Date format. Currently it is  factor

为什么要转换为 factor?文档说 timevar 参数无法处理因子。它可以处理 character 当且仅当它们是 特定 格式时,即(例如):2010Q1。当然可以处理 Date.

这是我的解决方案: 我只是创建了一个带有转换的新列,我将年份(你必须知道,否则你可以使用代理)粘贴到所有 Q1Q2 等。这不会很难我认为使用回收规则,这里只是一个小例子。 之后我将该列转换为 character.

transform(df, time2 = paste(2010, df$time, sep = "")) -> df1
df1$time2 <- as.character(df1$time2)

df1会是这样的:

 df1
  time var1 var2 idvar  time2
1   Q1    1    4     A 2010Q1
2   Q1    2    3     B 2010Q1
3   Q2    3    2     A 2010Q2
4   Q2    4    1     B 2010Q2

之后您可以使用您的代码:

 g = gvisMotionChart(df1,timevar="time2",idvar="idvar")

生成此图(使用 plot(g)):