首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何选择行内标准差?(在SQL中-或R :)

问如何选择行内标准差?(在SQL中-或R :)
EN

Stack Overflow用户
提问于 2010-10-21 15:51:48
回答 4查看 5.6K关注 0票数 4

我想知道是否有一种方法可以从同一行内的MySQL中的几个整数字段中选择标准差。显然,如果我使用

代码语言:javascript
复制
SELECT STDDEV(col1) FROM mytable

我只得到了特定列的标准差。让我们假设我有一个表,比如:id,somefield1,somefield2, integerfield1,integerfield2,integerfield3, ... ,integerfield30。现在我想在一行中选择整数域1-30的标准差,并将其保存为sdfield。当然,我可以使用统计软件来实现这一点,但我只是想知道是否有一种方法可以直接在MySQL中实现。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-10-22 16:19:25

我自己找到了两个解决方案:

1)规范化数据库。我最终得到了两个表:

表1 uid |配置信息1|配置元信息2

表2 uid | col | result_of_col

然后我就可以很容易地使用标准的STDDEV函数了。

2)使用R。数据是非规范化格式,因为它应该在统计分析中使用。因此,很容易进入R并使用以下代码。

sd(t(数据集1:4,3:8))

请注意,我只是通过选择第3-8列来获取此data.frame的数字部分。不要受到太多数据的影响(这就是为什么我这次只使用前几行的原因)。t()调换必要的数据,因为sd()只处理列。

在vsn包中有一个函数rowSds,它的工作原理应该类似于rowMean和rowSum,但不知何故,它可能会被弃用。至少这个包在瑞士CRAN镜像上是不可用的;)。

另外一个人。

票数 1
EN

Stack Overflow用户

发布于 2010-10-21 15:59:48

为简单起见,假设您有名为A、B、C ...的n列。:

代码语言:javascript
复制
SELECT SQRT(  
  (A*A + B*B + C*C + ...)/n  - (A+B+C+...)*(A+B+C+...)/n/n) AS sd
  FROM table;
票数 3
EN

Stack Overflow用户

发布于 2010-10-21 16:08:26

您是否尝试过使用UNION来有效地将所有列值放到单独的行中?可能是这样的:

代码语言:javascript
复制
SELECT STDDEV(allcols)
FROM (
    SELECT col1 FROM table WHERE id=requiredID
    UNION
    SELECT col2 FROM table WHERE id=requiredID
    UNION
    SELECT col3 FROM table WHERE id=requiredID
    UNION
    SELECT col4 FROM table WHERE id=requiredID
    UNION
    SELECT col5 FROM table WHERE id=requiredID
)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3985333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档