首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换ChemoSpec软件包的光谱数据中的矩阵txt文件

转换ChemoSpec软件包的光谱数据中的矩阵txt文件
EN

Stack Overflow用户
提问于 2011-07-01 22:33:30
回答 3查看 994关注 0票数 0

我想使用质谱约为60'000数据点的ChemoSpec。

我已经将它们作为矩阵存储在一个txt文件中(X + 90个样本= 91列;60'000行)。

如何将此文件调整为光谱数据,而无需再次将每个文件导出为csv格式(考虑到数据的大小,该格式在R中相当长)?

EN

回答 3

Stack Overflow用户

发布于 2011-07-02 00:07:52

典型的(也是唯一的?)将数据导入ChemoSpec的方法是通过getManyCsv()函数,正如问题所示,该函数需要为每个样本使用一个CSV文件。

从所描述的91列- 60,000行文件创建90个CSV文件,在R中可能有点慢和乏味,但可以使用独立的应用程序来完成,无论是现有的实用程序还是一些特别的脚本。

一个R-only的解决方案是创建一个新的方法,比如 getOneBigCsv(),改编自 getManyCsv()。毕竟,the logic of getManyCsv()是相对简单的。

不要期望这样的解决方案会很快,但在任何情况下,它都应该与运行getManyCsv()所需的时间相比较,并避免创建和管理许多文件,因此总体上会更快,当然也不会那么凌乱。

票数 0
EN

Stack Overflow用户

发布于 2011-07-04 05:31:22

对不起,2天前我错过了你的问题。我是ChemoSpec的作者-除了在某个地方发帖外,请随时直接给我写信。

解决方案很简单。您已经将数据放入矩阵中(在使用>read.csv("file.txt")读取数据之后)。因此您可以使用它手动创建一个Spectra对象。在R控制台中,输入?Spectra查看频谱对象的结构,这是一个包含特定条目的列表。您需要将X列(我假设它是mass)放入freq槽中。然后,数据矩阵的其余部分将进入数据槽。然后手动创建其他所需的条目(确保数据类型正确)。最后,通过像>class(my.spectra) <- " Spectra“这样的操作将Spectra类分配到您完成的列表中,您就应该可以开始工作了。如果你能更完整地描述你的数据,我可以给你列表上或列表外的更多细节。也许你已经解决了这个问题?

顺便说一句,ChemoSpec完全没有经过MS data的测试,但我很想知道它是如何为您工作的。可能会有一些变化是有帮助的,所以我希望你能给我反馈。

祝你好运,让我知道我还能帮上什么忙。

票数 0
EN

Stack Overflow用户

发布于 2018-07-06 17:49:05

许多年过去了,我不确定是否还有人对这个话题感兴趣。但我也遇到了同样的问题,我做了一个小的变通办法,通过从数据本身中提取信息,将我的数据转换为类“Spectra”:

代码语言:javascript
复制
#Assumption:
# Data is stored as a numeric data.frame with column names presenting samples
# and row names including domain axis

dataframe2Spectra <- function(Spectrum_df,
                              freq = as.numeric(rownames(Spectrum_df)),
                              data = as.matrix(t(Spectrum_df)), 
                              names = paste("YourFileDescription", 1:dim(Spectrum_df)[2]), 
                              groups = rep(factor("Factor"), dim(Spectrum_df)[2]), 
                              colors = rainbow(dim(Spectrum_df)[2]), 
                              sym = 1:dim(Spectrum_df)[2], 
                              alt.sym = letters[1:dim(Spectrum_df)[2]], 
                              unit = c("a.u.", "Domain"), 
                              desc = "Some signal. Describe it with 'desc'"){
  features <- c("freq", "data", "names", "groups", "colors", "sym", "alt.sym", "unit", "desc")
  Spectrum_chem <- vector("list", length(features))
  names(Spectrum_chem) <- features

  Spectrum_chem$freq <- freq
  Spectrum_chem$data <- data
  Spectrum_chem$names <- names
  Spectrum_chem$groups <- groups
  Spectrum_chem$colors <- colors
  Spectrum_chem$sym <- sym
  Spectrum_chem$alt.sym <- alt.sym
  Spectrum_chem$unit <- unit
  Spectrum_chem$desc <- desc

  # important step
  class(Spectrum_chem) <- "Spectra"

  # some warnings
  if (length(freq)!=dim(data)[2]) print("Dimension of data is NOT #samples X length of freq")

  if (length(names)>dim(data)[1]) print("Too many names")
  if (length(names)<dim(data)[1]) print("Too less names")

  if (length(groups)>dim(data)[1]) print("Too many groups")
  if (length(groups)<dim(data)[1]) print("Too less groups")

  if (length(colors)>dim(data)[1]) print("Too many colors")
  if (length(colors)<dim(data)[1]) print("Too less colors")

  if (is.matrix(data)==F) print("'data' is not a matrix or it's not numeric")

  return(Spectrum_chem)
}
Spectrum_chem <- dataframe2Spectra(Spectrum)
chkSpectra(Spectrum_chem)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6549343

复制
相关文章

相似问题

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