在R中为N,Min / Max,SD,Mean和Median创建一个表

时间:2013-05-02 15:43:14

标签: r data.table

我对 R 非常陌生,所以请在这个基本问题上向我承担责任。 我有一个数据集DATA,我使用data.table包创建。我在0和1之间创建了200个随机数,然后进行了10000次,最后创建了一个数据表,用于每次迭代的描述性统计。我的代码看起来像这样:

rndm<-runif(200, min=0, max=1)
reps <- data.table(x=runif(200*10000),iter=rep(1:200,each=10000))
DATA <- reps[,list(mean=mean(rndm),median=median(rndm),sd=sd(rndm),min=min(rndm),
max=max(rndm)),by=iter]

数据看起来像这样:

    Mean    Median     SD    Min    Max
1   0.521    0.499   0.287  0.010  0.998
2   0.511    0.502   0.290  0.009  0.996
.    ...     ... 

我想要做的是创建一个表,找到累积样本的N,平均值,中位数,标准差,最小值和最大值 (不是像上面那样每列的N)。我需要输出看起来像这样:

   N     Mean   Median    SD    Min    Max
 10000  .502     .499    .280  .002   .999

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:7)

您还可以定义一个功能。这种方法允许您为不同的变量创建相同的表。

summaryfun <- function(x)list(N=length(x),Mean=mean(x),Median=median(x),SD=sd(x),Min=min(x),Max=max(x))
DATA[,summaryfun(mean)]

答案 1 :(得分:4)

目前,您正在为不同iter的每个项目单独计算列表中的函数。但是,如果您想要聚合统计数据,只需删除by子句,您的函数将在整个数据集上运行一次。然后添加一个项目以提供N - 使用data.table提供的.N变量。

DATA <- reps[, list(N=.N, mean=mean(rndm), median=median(rndm), 
                    sd=sd(rndm), min=min(rndm), max=max(rndm))]