【问题标题】:multiple (uneven row numbers) csv files into a matrix in R多个(不均匀的行号)csv文件到R中的矩阵中
【发布时间】:2015-12-14 16:22:18
【问题描述】:

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

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

如您所见,名称有重叠,但文件并不完全匹配。为构建热图弥补缺失数据的最佳方法是什么?

【问题讨论】:

  • 是否需要保留第一行(ark、ant 等)?
  • 我将它们放入热图以供稍后使用。

标签: r csv heatmap


【解决方案1】:

问题是您在第一列中只有一个“行”,因此 R 不知道如何处理您的数据名称。

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

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

然后使用readLines读入每个文件,然后只使用read.table的数据中的2:end,并将第一行作为列名:

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)

从您的示例数据中得到以下信息:

                       Species ark. ant.
1    Actinocyclus actinochilus    7   55
2         Asterionella formosa    4    3
3      Aulacodiscus orientalis    1   NA
4        Aulacoseira granulata    3    5
5         Chaetoceros radicans    1    7
6            Corethron hystrix    6   NA
7             Coscinodiscaceae    1   NA
8  Dactyliosolen fragilissimus   32    5
9            Diadesmis gallica    1   NA
10            Diatoma hyemalis    1    5
11  Synedropsis hyperboreoides    4   28
12          Trigonium formosum    4    3
13         Urosolenia eriensis    2    2
14        Stephanopyxis turris   NA    1
15      Striatella unipunctata   NA    1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 2015-06-30
    相关资源
    最近更新 更多