2015-08-21 1 views
0

У меня есть некоторые данные, как это:Используя упорядоченный фактор, как timevar в 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 

Мне нужно сделать MotionChart используя каждую четверть (Q1 и Q2) как раз вар. Я попытался сделать 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 

ответ

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

производит этот участок (с plot(g)): enter image description here

+1

Спасибо , Поскольку в сообщении об ошибке указано, что функция принимает только числовые или форматы даты, мне не приходило в голову работать с символом (коэффициент выбирается автоматически, когда я использую read.table в своих фактических данных) – Bernardo

+1

@ Бернардо вы можете избежать (a кусок) моего решения с очень полезными «strAsAsFactors = FALSE» при загрузке данных. Этот аргумент делает то, что он говорит * strings как factor *, с 'FALSE' вы будете иметь символы по умолчанию. – SabDeM

+0

Вы правы, я полностью забыл об этом аргументе! Последнее, вы не возражаете, чтобы объяснить «Может ли он обрабатывать характер, если и только если они находятся в определенном формате»? Что это за формат? – Bernardo

Смежные вопросы