【问题标题】:Plot of count data from table从表中绘制计数数据
【发布时间】:2013-09-04 12:42:39
【问题描述】:

我有一个 CSV 文件,其中包含 10 个样本中每个样本的大约 2000 个数据点(计数):

3,1,3,2,2,2,0,...
2,0,0,1,3,2,1,...
3,0,3,0,3,1,0,...
....

我使用以下内容查看每个样本的列表计数:

x = read.csv('thefile.csv', header=FALSE)
table(as.numeric(x[1,])
table(as.numeric(x[2,])
table(as.numeric(x[3,])

我想绘制所有样本的列表计数的条形图(或其他)图,以进行比较。当我尝试对前五个样本进行测试时:

a = table(as.numeric(x[1,])
b = table(as.numeric(x[2,])
c = ...
barplot(rbind(a,b,c,d,e))

我发现图表中的值未对齐,因为并非所有样本都具有相同的计数值。例如,样本 2 中可能不存在“1”的值,从而导致列表结果中没有匹配的条目。

绘制这些列表计数数据以进行直观比较的最佳方法是什么?

【问题讨论】:

    标签: r csv plot


    【解决方案1】:

    可重复的数据:

    x <- replicate(10, round(10 * rexp(2000, 10)))
    

    正如您正确指出的,每个样本的频率表可能不包含所有值。

    apply(x, 2, table)
    ## [[1]]
    
    ##   0   1   2   3   4   5   6   8 
    ## 771 798 274 104  37  14   1   1 
    
    ## [[2]]
    
    ##   0   1   2   3   4   5   6 
    ## 792 788 275  77  37  26   5    
    
    ## etc.
    

    诀窍是将x 的每一列转换为以x 的所有可能值作为其水平的因子。

    (y <- apply(x, 2, function(column) table(factor(column, levels = 0:9))))
    ##   [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
    ## 0  771  792  797  783  775  806  801  793  788   795
    ## 1  798  788  795  744  792  738  765  720  729   760
    ## 2  274  275  253  308  271  288  263  297  312   261
    ## 3  104   77   91  110  104  114  103  117  106   124
    ## 4   37   37   42   37   35   33   48   49   41    36
    ## 5   14   26   16    8   11   16   12   15   17    14
    ## 6    1    5    3    8    8    2    3    4    6     7
    ## 7    0    0    3    1    3    3    2    1    1     1
    ## 8    1    0    0    1    1    0    3    3    0     1
    ## 9    0    0    0    0    0    0    0    1    0     1
    

    然后你可以绘制你的条形图

    barplot(y)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-06
      • 1970-01-01
      • 1970-01-01
      • 2020-02-17
      • 2018-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多