0

我有一个 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”的值,从而导致列表结果中没有匹配的条目。

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

4

1 回答 1

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)
于 2013-09-04T13:26:04.360 回答