使用r从3列CSV文件创建DTM

时间:2018-03-24 12:20:51

标签: r text-mining

我有csv文件,包含600k行和3行,第一个包含疾病名称,第二个包含一个基因,第三个包含一个类似的数字:我有大约4k疾病和16k基因所以有时疾病名称和基因名称是还原剂。

霍乱xx45 12 癌症xx65 1 霍乱xx65 0

我想用R做一个DTM矩阵,我一直试图使用来自tm库的语料库命令,但是语料库并没有减少疾病的数量和规模的600k ish ,我很想了解如何将该文件转换为DTM。

我很抱歉没有这么精确,完全从计算机科学开始作为一个生物人:) 干杯!

1 个答案:

答案 0 :(得分:0)

如果您不关心第三栏中的数字,那么您可以使用前两列(基因和疾病)完成我认为您尝试做的事情。

一些模拟数据的示例:

library(data.table)

# Create a table with 10k combinations of ~6k different genes and 40 different diseases
df <- data.frame(gene=sapply(1:10000, function(x) paste(c(sample(LETTERS, size=2), sample(10, size=1)), collapse="")), disease=sample(40, size=100000, replace=TRUE))

table(df)创建一个大矩阵,nGenes行为long,nDiseases列为wide。只看前10行(因为它太大而稀疏)。

head(table(df))
      disease
gene   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
  AB10 0 0 1 0 0 0 0 0 1  0  0  1  0  0  0  0  0  0  0  1  0  0  0  0  1  0  0
  AB2  1 1 0 0 0 0 1 0 0  0  0  0  0  0  2  0  0  2  0  0  0  0  1  0  1  0  1
  AB3  0 1 0 0 2 1 1 0 0  1  0  0  0  0  0  2  1  0  0  1  0  0  1  0  3  0  1
  AB4  0 0 1 0 0 1 0 2 1  1  0  1  0  0  1  1  1  1  0  1  0  2  0  0  0  1  1
  AB5  0 1 0 1 0 0 2 2 0  1  1  1  0  1  0  0  2  0  0  0  0  0  0  1  1  1  0
  AB6  0 0 2 0 2 1 0 0 0  0  0  0  0  0  0  0  1  0  1  1  0  1  0  0  0  0  0
      disease
gene   28 29 30 31 32 33 34 35 36 37 38 39 40
  AB10  0  0  1  2  1  0  0  1  0  0  0  0  0
  AB2   0  0  0  0  0  0  0  0  0  0  0  0  0
  AB3   0  0  1  1  1  0  0  0  0  0  1  1  0
  AB4   0  0  1  2  1  1  1  1  1  2  0  3  1
  AB5   0  2  1  1  0  0  3  4  0  1  1  0  2
  AB6   0  0  0  0  0  0  0  1  0  0  0  0  0

或者,您可以排除0的计数,仅包括实际存在的组合。可以使用data.table进行简单的聚合,例如(从上面的例子继续)

library(data.table)
dt <- data.table(df)
dt[, .N, by=list(gene, disease)]

给出如下的频率表:

       gene disease N
    1:  HA5      20 2
    2:  RF9      10 3
    3:  SD8      40 2
    4:  JA7      35 4
    5:  MJ2       1 2
   ---
75872: FR10      26 1
75873:  IC5      40 1
75874:  IU2      20 1
75875:  IG5      13 1
75876:  DW7      21 1
相关问题