总体而言,我想使用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
正如您所看到的,名称中存在重叠,但文件并不完全匹配。对于要构建热图的缺失数据,最好的方法是什么?
答案 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)