我有一些这样的数据:
time var1 var2 idvar
1 Q1 1 4 A
2 Q1 2 3 B
3 Q2 3 2 A
4 Q2 4 1 B
我需要使用每个季度(MotionChart
和Q1
)作为时间变量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
答案 0 :(得分:1)
为什么你转换为factor
?文档说timevar
参数不能处理因子。当且仅当它们采用特定格式时,它才能处理character
,例如:2010Q1
。当然它可以处理Date
。
这是我的解决方案:
我只是创建了一个包含转换的新列,我将所有Q1
,Q2
等粘贴年份(您必须知道,否则您可以使用代理)等等。我认为,通过使用回收规则很难,这只是一个小例子。
之后,我将该列转换为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")