точечный пожар сюжет список элементов - PullRequest
0 голосов
/ 15 марта 2019

У меня есть таблица данных в следующем формате:

enter image description here

и я хочу построить график зависимости температуры от времени, есть идеи, как это сделать?

Ответы [ 2 ]

1 голос
/ 18 марта 2019

Это можно сделать с помощью функции данных TERR.Я не знаю, насколько удобно вы интегрируете Spotfire с TERR, здесь есть, например, вступительное видео (демонстрация начинается примерно с минуты 7):

https://www.youtube.com/watch?v=ZtVltmmKWQs

Имея это в видуЯ написал скрипт без загрузки какой-либо библиотеки, поэтому он довольно многословный и явный, но, надеюсь, будет проще следовать шаг за шагом.Я уверен, что есть более элегантный способ, и есть лучшие способы сделать его гибким с именами столбцов, но это только начало.

Ваш ввод будет таблицей данных (dt, исходные данные), а вывод - новой таблицей данных (dt.out, преобразованные данные).Все имена столбцов (и некоторые значения) явно указываются в скрипте (поэтому, если вы измените их, он не будет работать).

#remove the []
dt$Values=gsub('\\[|\\]','',dt$Values)

#separate into two different data frames, one for time and one for temperature
dt.time=dt[dt$Description=='time',]
dt.temperature=dt[dt$Description=='temperature',]

#split the columns we want to separate into a list of vectors
dt2.time=strsplit(as.character(dt.time$Values),',')
dt2.temperature=strsplit(as.character(dt.temperature$Values),',')

#rearrange times
names(dt2.time)=dt.time$object  
dt2.time=stack(dt2.time) #stack vectors
dt2.time$id=c(1:nrow(dt2.time)) #assign running id for merging later
colnames(dt2.time)[colnames(dt2.time)=='values']='time'

#rearrange temperatures
names(dt2.temperature)=dt.temperature$object  
dt2.temperature=stack(dt2.temperature) #stack vectors
dt2.temperature$id=c(1:nrow(dt2.temperature)) #assign running id for merging later
colnames(dt2.temperature)[colnames(dt2.temperature)=='values']='temperature'  

#merge time and temperature
dt.out=merge(dt2.time,dt2.temperature,by=c('id','ind')) 
colnames(dt.out)[colnames(dt.out)=='ind']='object'
dt.out$time=as.numeric(dt.out$time)
dt.out$temperature=as.numeric(dt.out$temperature)

Gaia

0 голосов
/ 19 марта 2019

, поскольку все показанные здесь примеры строк содержат ровно четыре элемента списка, и вы не указали иначе, я предполагаю, что все данные соответствуют этому формату.

с этим предположением,разделение значений на столбцы с помощью функции выражения RXReplace() становится довольно тривиальным, хотя и немного беспорядочным.

Вы можете создать четыре вычисляемых столбца, каждый с выражением, например:

Int(RXReplace([values],"\\[([\\d\\-]+),([\\d\\-]+),([\\d\\-]+),([\\d\\-]+)]","\\1",""))

третий аргумент "\\1" определяет, какое число в списке извлечь.обратные косые черты удваиваются («экранируются») в соответствии с требованиями функции RXReplace().

Обратите внимание, что в этом примере предполагается, что все числа являются целыми числами.если у вас есть десятичные дроби, вам нужно настроить каждую «фразу» регулярного выражения на ([\\d\\-\\.]+), и вам нужно будет обернуть выражение в Real(), а не Int() (если вы пропустите эту часть,результатом будет тип String, который впоследствии может привести к путанице при работе с данными).

как только у вас будет четыре столбца, вы сможете отменить поворот, чтобы легко получить данные.

...