代码之家  ›  专栏  ›  技术社区  ›  Matt Bannert

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

  •  4
  • Matt Bannert  · 技术社区  · 14 年前

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

    SELECT STDDEV(col1) FROM mytable
    

    id,somefield1,somefield2, integerfield1,integerfield2,integerfield3, ... ,integerfield30 .

    4 回复  |  直到 7 年前
        1
  •  3
  •   Brandon Bertelsen    14 年前

    带R:

    df <- your.pull
    sd(t(df[sapply(df, is.numeric)]))
    

        2
  •  2
  •   J-16 SDiZ    14 年前

    为了简单起见,假设您 n 列,命名 A , B C .... :

    SELECT SQRT(  
      (A*A + B*B + C*C + ...)/n  - (A+B+C+...)*(A+B+C+...)/n/n) AS sd
      FROM table;
    
        3
  •  2
  •   Spudley Pat    14 年前

    您是否尝试过使用UNION将所有列值有效地放在单独的行中?

    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
    )
    
        4
  •  1
  •   Matt Bannert    14 年前

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

    1) 规范化数据库。我最后有两张桌子:

    表一 uid |信息1 |元信息2

    表二 uid | col | col的结果

    这样我就可以很容易地使用标准STDDEV函数。

    2) 使用R。数据是非标准化格式,因为它应该用于统计分析。因此很容易进入R并使用下面的代码。

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

    请注意,我只选择列3-8来获取data.frame的数字部分。不要被太多的数据击中(这就是我这次只使用前几行的原因)。t()转置必要的数据,因为sd()只适用于列。

    还有其他人。