如何计算一组不同大小的矢量的描述性统计数据

时间:2010-07-13 06:03:54

标签: r

在一个问题中,我有一组向量。每个矢量都有传感器读数,但长度不同。我想计算每个这些向量的相同描述性统计数据。我的问题是,我应该如何将它们存储在R中。使用c()连接向量。使用list()似乎会导致mean()等函数出错。数据框是否是正确的对象?

对于不同大小的向量应用相同函数的最佳实践是什么?假设数据驻留在SQL服务器中,应该如何导入?

4 个答案:

答案 0 :(得分:7)

不同大小的矢量应该组合成一个列表:data.frame期望每列的长度相同。

使用lapply获取您的数据。然后再次使用lapply获取描述性统计信息。

x <- lapply(ids, sqlfunction)
stats <- lapply(x, summary)

sqlfunction是您创建的用于查询数据库的函数。您可以通过调用stats或使用do.call(rbind, stats)plyr列表折叠为数据框:

library(plyr)
x <- llply(ids, sqlfunction)
stats <- ldply(x, summary)

答案 1 :(得分:2)

大多数绘图和回归函数都希望数据采用“长”格式:一列中的数值和其他列中的数值或协变量值。堆栈函数将接受不规则长度列表,tapply或aggregate将允许函数处理不规则长度类别变量:

dlist <- list(a=1:2, b=13:15, cc= 5:1)
s.dfrm <- stack(dlist)
s.dfrm
   values ind
1       1   a
2       2   a
3      13   b
4      14   b
5      15   b
6       5  cc
7       4  cc
8       3  cc
9       2  cc
10      1  cc
tapply(s.dfrm$values, s.dfrm$ind, mean)
   a    b   cc 
 1.5 14.0  3.0 

答案 2 :(得分:1)

“如果不同的大小将相同的函数应用于向量,最佳做法是什么?假设数据驻留在SQL服务器中,应该如何导入?”

正如Shane所说,lappy是你明确的选择。当然,您也可以将它与自定义函数一起使用 - 如果您觉得摘要没有提供足够的信息。

对于SQL部分:大多数关系型DBMS都有软件包:RPostgreSQL,RMySQL,ROracle以及RODBC作为一般软件包。如果你说MS SQL服务器,我不确定是否有特定的包,但RODBC应该做的工作。我不知道你是否与MS SQL服务器的东西结婚,但如果你可以选择为R-RMySQL运行你自己的本地数据库,那么设置起来真的很容易。

通常,通过使用数据库包,您可以使用诸如dbListTable或dbReadTable之类的包装器,它只是将表转换为R data.frame。

如果您真的想要导入数据,可以使用数据库的.csv导出,并根据您的需要使用read.table或read.csv。但我建议直接连接到数据库 - 即使你以前没有这样做也不是那么困难,而且它更有趣。

编辑:我不使用MS,但其他人在mailing list post帮助

之前完成了它

答案 3 :(得分:1)

我倾向于将其导入数据框而不是列表。您的每个矢量都可能由一个或多个有意义的变量区分。假设您想要跟踪收集数据的时间和收集数据的位置。在数据框中,您将拥有一列,即所有向量连接在一起的列,但它们将按时间和位置列中的值进行区分。要获得每个单独的向量均值,那么tapply()可能是首选工具。

tapply(df$y, list(df$time, df$location), mean)

或者,也许aggregate()会更好,这取决于变量的数量和您未来的需求。