首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >spotfire元素绘图列表

spotfire元素绘图列表
EN

Stack Overflow用户
提问于 2019-03-15 18:53:43
回答 2查看 43关注 0票数 0

我有一个数据表,其格式如下:

我想画出温度与时间的关系,你知道怎么做吗?

EN

回答 2

Stack Overflow用户

发布于 2019-03-19 02:15:26

这可以在TERR数据函数中完成。我不知道你将Spotfire和TERR集成在一起有多舒服,例如,这里有一个介绍视频(演示大约从第7分钟开始):

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

考虑到这一点,我在没有加载任何库的情况下编写了脚本,因此它相当冗长和明确,但希望它更容易一步步地理解。我相信有一种更优雅的方法,也有更好的方法使其具有列名称的灵活性,但这只是一个开始。

您的输入将是一个数据表(dt,原始数据),而输出将是一个新的数据表(dt.out,转换后的数据)。所有列名(和一些值)都在脚本中显式寻址(因此,如果您更改它们,它将不起作用)。

代码语言:javascript
复制
#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)

盖亚

票数 1
EN

Stack Overflow用户

发布于 2019-03-20 04:17:37

因为您在这里显示的所有示例行都恰好包含四个列表项,并且您没有指定其他列表项,所以我假定所有数据都符合这种格式。

有了这个假设,使用RXReplace()表达式函数将值拆分为多个列变得非常简单,尽管有点麻烦。

您可以创建四个计算列,每个列都具有如下表达式:

代码语言:javascript
复制
Int(RXReplace([values],"\\[([\\d\\-]+),([\\d\\-]+),([\\d\\-]+),([\\d\\-]+)]","\\1",""))

第三个参数"\\1"确定要提取列表中的哪个数字。根据RXReplace()函数的要求,反斜杠被加倍(“转义”)。

请注意,此示例假设所有数字都是整数。如果使用小数,则需要将正则表达式的每个“短语”调整为([\\d\\-\\.]+),并且需要在Real()而不是Int()中包装表达式(如果省略这一部分,结果将是字符串类型,这可能会在以后处理数据时造成混淆)。

一旦有了这四列,您就可以轻松地取消透视以获取数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55180999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档