2015-08-17 1 views
0

Мои типы данных являются строками, поэтому мне интересно, как я могу использовать одну из диаграммы движения Google или диаграмму разброса Google для этой цели? Я хочу, чтобы моя ось y отображала один из плодов и ось x, чтобы показать временную метку. Я получил эту ошибку:Как использовать движок google или диаграмму рассеяния для строкового типа данных в R?

> motion 
    dd.rosbagTimestamp dd.data 
1 1438293900729698553 strawberry 
2 1438293901681590725 avocado 
3 1438293904496769068 avocado 
4 1438293943211221553 blueberry 
5 1438293963216807017  kiwi 
> gvisScatterChart(motion) 
Error in gvis(type = type, checked.data, options = options, chartid = chartid, : 
    Only the following data types are allowed: number 
However, dd.rosbagTimestamp, dd.data is of type string, string 

Проблема заключается в том, что бы вы сделали в googlevis, если у вас есть данные в виде строки, как плодовые имена? enter image description here

+1

Вы можете преобразовать их в 'объекты POSIXt', но то, что формат вашей временной метки? Например. Выполнение 'as.numeric (Sys.time())' дает вам количество секунд с момента Unix (1 января 1970 года 00:00:00), что составляет примерно 1,4 миллиарда секунд. Но ваши цифры намного больше, чем это, так что они представляют? Первые десять символов каждой из ваших временных меток кажутся разумными значениями для того, что я описал выше - 'as.POSIXct (1438293900, tz =" UTC ", origin =" 1970-01-01 00:00:00 ")' - но являются ли остальные 9 символов посторонними? – nrussell

+0

@ nrussell это очень хороший вопрос. На самом деле я не уверен, какие цифры от 11 до 19 отображаются в моей метке. Это одна из причин, по которой я получаю неправильные визуализации здесь http: // stackoverflow.com/questions/32053999/how-to-split-the-timestamp-in-r-for-googlevis-for-no-overlap, можете ли вы взглянуть на него? –

ответ

2

Я хочу отметить несколько вещей, прежде чем попасть в раствор:

  1. я не уверен, кто поставил этот набор данных вместе, но они либо испортили что-то с метками времени, или влево из какой-то очень важной информации о том, как их расшифровать, по причинам, указанным в моих комментариях выше.
  2. Я использовал то, что я чувствовал, самый (re: не обязательно правильно) подходящее преобразование для отметки времени 19 символов - т. Е. Первые десять цифр должны быть числом секунд с эпохи Unix; но даже если этот набор данных очень странный. 5000+ наблюдений с менее чем 300 уникальными отметками времени (с использованием 10-значного метода)?
  3. Я не знаю, является ли это назначением курса или чем-то подобным, и вам было поручено использовать либо gvisScatterChart, либо gvisMotionChart, но ни один из них не подходит для этого набора данных IMO. Я пошел с последним из двух; Я не уверен, что вы можете представить свои данные с помощью первого. Независимо от того, вы должны иметь в виду, что как вы представляете свои данные, по крайней мере важно, как что вы представляете. googleVis предлагает некоторые аккуратные инструменты, которые иногда очень полезны, но я лично считаю интерфейс слишком строгим (вероятно, из-за API графиков Google и не обязательно ошибки разработчиков пакетов). В этом случае gvisMotionChart, по-видимому, не позволяет вам строить что-либо менее атомное, чем ежедневные наблюдения, поэтому мне пришлось преобразовать 1 секунду пробелов в 1 день пробелов.

В любом случае, с учетом указанных выше вопросов, вот один из возможных подходов:


library(data.table) 
library(googleVis) 
## 
mdt <- data.table(motion) 
gdt <- mdt[ 
    ,.(frequency = .N), 
    keyby = "tstamp,fruit"] 

gdt[ 
    ,time_value := as.numeric(
    tstamp - min(gdt$tstamp))] 
gdt[ 
    ,scaled_date := min(
    as.Date(gdt$tstamp)) + time_value] 
## 
plot_data <- data.frame(
    idvar = gdt$fruit, 
    timevar = gdt$scaled_date, 
    frequency = gdt$frequency, 
    fruit = gdt$fruit) 
## 
gmc <- gvisMotionChart(
    data = plot_data, 
    idvar = "idvar", 
    timevar = "timevar", 
    yvar = "frequency", 
    colorvar = "fruit", 
    date.format = "%Y-%m-%d") 
## 
R> plot(gmc) 

Это снимок диаграммы движения: enter image description here


И необработанные данные, считанные из CSV-файла в вашей ссылке:


Df <- read.csv(
    file = "~/tmp/gazedata.csv.txt", 
    sep = ",", header = TRUE, 
    colClasses = "character", 
    stringsAsFactors = FALSE 
) 
## 
motion <- data.frame(
    tstamp = as.POSIXct(
    as.numeric(substr(Df[,1], 1, 10)), 
    tz = "UTC", 
    origin = "1970-01-01 00:00:00"), 
    fruit = Df$data 
) 

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

  • Нет связанных вопросов^_^