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

时间:2015-08-21 17:33:25

标签: r googlevis

我有一些这样的数据:

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

我需要使用每个季度(MotionChartQ1)作为时间变量Q2。我试图让df$time成为有序因子,但它仍然会给我一个错误,因为timevar需要采用数字或日期格式。这有什么解决方法吗?我的实际数据跨越了几年,每年的所有四个季度都采用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

1 个答案:

答案 0 :(得分:1)

为什么你转换为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)): enter image description here