多个(不均匀的行号)csv文件到R中的矩阵

时间:2015-12-14 16:22:19

标签: r csv heatmap

总体而言,我想使用gplots在R中制作热图。所以我需要将csv文件组合成一个矩阵。我尝试了varoius尝试,但我一直遇到行长不均匀的问题 比如当我从代码中尝试这种方法时我得到了

num.el <- sapply(a, length)
res <- cbind(unlist(a), rep(1:length(a), num.el))

我收到错误

  Error in structure(res, levels = lv, names = nm, class = "factor") : 
  'names' attribute [24] must be the same length as the vector [2]

我有40多个csv文件,行号不均匀。我在下面提到了两个样本

test1.csv

ark,
Actinocyclus actinochilus,7
Asterionella formosa,4
Aulacodiscus orientalis,1
Aulacoseira granulata,3
Chaetoceros radicans,1
Corethron hystrix,6
Coscinodiscaceae,1
Dactyliosolen fragilissimus,32
Diadesmis gallica,1
Diatoma hyemalis,1
Synedropsis hyperboreoides,4
Trigonium formosum,4
Urosolenia eriensis,2

test2.csv

ant,
Actinocyclus actinochilus,55
Asterionella formosa,3
Aulacoseira granulata,5
Chaetoceros radicans,7
Dactyliosolen fragilissimus,5
Diatoma hyemalis,5
Stephanopyxis turris,1
Striatella unipunctata,1
Synedropsis hyperboreoides,28
Trigonium formosum,3
Urosolenia eriensis,2

正如您所看到的,名称中存在重叠,但文件并不完全匹配。对于要构建热图的缺失数据,最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

问题是你只有一个&#34; row&#34;在第一列中,所以R不知道如何处理数据名称。

这里我们创建文件夹中所有.csv文件的列表:

z <- list.files(pattern = ".*csv")

然后使用readLines读取每个文件,然后仅使用2:end的{​​{1}}数据,并将第一行作为列的名称:

read.table

现在您的数据应该是数据框列表。

我假设你想要data <- lapply(z, function(x) {temp <- readLines(x); read.table(text = temp[2:length(temp)], sep = ",", col.names = c("Species", temp[1]))}) 他们:

merge

其中给出了以下示例数据:

Reduce(function(x, y) merge(x, y, all=TRUE), data)