Я хочу отметить несколько вещей, прежде чем попасть в раствор:
- я не уверен, кто поставил этот набор данных вместе, но они либо испортили что-то с метками времени, или влево из какой-то очень важной информации о том, как их расшифровать, по причинам, указанным в моих комментариях выше.
- Я использовал то, что я чувствовал, самый (re: не обязательно правильно) подходящее преобразование для отметки времени 19 символов - т. Е. Первые десять цифр должны быть числом секунд с эпохи Unix; но даже если этот набор данных очень странный. 5000+ наблюдений с менее чем 300 уникальными отметками времени (с использованием 10-значного метода)?
- Я не знаю, является ли это назначением курса или чем-то подобным, и вам было поручено использовать либо
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)
Это снимок диаграммы движения: 
И необработанные данные, считанные из 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
)
Вы можете преобразовать их в 'объекты 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
@ nrussell это очень хороший вопрос. На самом деле я не уверен, какие цифры от 11 до 19 отображаются в моей метке. Это одна из причин, по которой я получаю неправильные визуализации здесь http: // stackoverflow.com/questions/32053999/how-to-split-the-timestamp-in-r-for-googlevis-for-no-overlap, можете ли вы взглянуть на него? –