Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何计算一组大小不同的向量的描述性统计信息_R - Fatal编程技术网

R 如何计算一组大小不同的向量的描述性统计信息

R 如何计算一组大小不同的向量的描述性统计信息,r,R,在一个问题中,我有一组向量。每个矢量都有传感器读数,但长度不同。我想对每个向量计算相同的描述性统计。我的问题是,我应该如何将它们存储在R中。使用c()连接向量。使用list()。数据帧是正确的对象吗 如果向量大小不同,将同一函数应用于向量的最佳实践是什么?假设数据驻留在SQL server中,应如何导入?不同大小的向量应组合到一个列表中:data.frame要求每个列的长度相同 使用lappy获取数据。然后再次使用lappy获得描述性统计数据 x <- lapply(ids, sqlfun

在一个问题中,我有一组向量。每个矢量都有传感器读数,但长度不同。我想对每个向量计算相同的描述性统计。我的问题是,我应该如何将它们存储在R中。使用
c()
连接向量。使用
list()。数据帧是正确的对象吗


如果向量大小不同,将同一函数应用于向量的最佳实践是什么?假设数据驻留在SQL server中,应如何导入?

不同大小的向量应组合到一个列表中:data.frame要求每个列的长度相同

使用
lappy
获取数据。然后再次使用
lappy
获得描述性统计数据

x <- lapply(ids, sqlfunction)
stats <- lapply(x, summary)
如果向量大小不同,将同一函数应用于向量的最佳做法是什么?假设数据驻留在SQL server中,应如何导入

正如Shane所建议的,lappy是您在这里的明确选择。当然,您也可以将其与自定义函数一起使用,以防您觉得summary没有提供足够的信息

对于SQL部分:大多数关系DBMS都有包:RPostgreSQL、RMySQL、ROracle,还有RODBC作为一个通用包。如果您谈到MS SQL server,我不确定是否有特定的包,但RODBC应该完成这项工作。我不知道你是否嫁给了MS SQL server之类的东西,但如果你可以选择为R运行自己的本地数据库,那么RMySQL真的很容易设置

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

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


编辑:我不使用MS,但其他人在使用MS之前就已经使用过了。也许有帮助,我倾向于将其导入到数据框中,而不是列表中。每个向量都可能由一个或多个有意义的变量来区分。假设您希望跟踪收集数据的时间和位置。在一个数据帧中,您将有一列所有向量连接在一起,但它们将通过时间和位置列中的值进行区分。要获得每个向量的平均值,tapply()可能是首选工具

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

或者,根据变量的数量和您未来的需要,aggregate()可能会更好。

大多数绘图和回归函数都希望数据采用“长”格式:一列中的数值和其他列中的分组或协变量值。stack函数将接受不规则长度列表,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 

dlist DF具有相同长度的列,但这并不意味着不应该将不同长度的向量分组到这些列中。它们允许人们对单个向量赋予比列表更多的意义。@Tal:Oops!这就是当你在半夜和孩子起床并回答一个问题时发生的事情。约翰:一般来说,我不同意你(根据我的答案),尤其是对一个新的R用户的建议。如果您没有理由将每一行关联为特定观察值,那么尝试创建长度可变的data.frame可能会有问题。换句话说,除非你有充分的理由在这里创建一个data.frame,否则它可能会让生活更加混乱(而不是附加更多的意义)。对于这种分析来说,使用列表更有效(感谢Lappy之类的东西)。我从来没有教过使用数据的人,在这种情况下,将向量保持在列表形式通常比长格式的表格数据(数据帧)更有用。我们显然来自不同的数据世界,也不知道海报的世界。如果所有的向量都只由一个随机变量区分开来,这只会让生活变得混乱。在这种情况下,列表更容易。如果一个数据点由两个或多个变量定义,那么表格长格式就更有用了。
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